Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
push ax dx ... pop dx ax
.model tiny .data s_array db 'Array ', '$' s_length db ' (length ', '$' s_end db '):', 0ah, '$' ; Данные для генератора случайных чисел rndseed dw ? rndmod dw 32749 rnd_1 dw ? rnd_2 dw ? rndcur dw 1 ; Массив cnt dw 2 arrlen dw ? maxarrlen equ 50 arr dw maxarrlen dup(?) SSEG segment stack db 400h dup(?) SSEG ends .code pnewline proc push dx mov dx, 0ah mov ah, 6h int 21h pop dx ret pnewline endp pspace proc push dx mov dx, ' ' mov ah, 6h int 21h pop dx ret pspace endp pdig proc push ax push dx or ax, 30h mov dx, ax mov ax, 0 mov ah, 6h int 21h pop dx pop ax ret pdig endp pnum proc push bx push cx push dx mov cx, 0 digloop: mov dx, 0 mov bx, 10 div bx push dx inc cx cmp ax, 0 je pdigloop jmp digloop pdigloop: pop ax call pdig loop pdigloop pop dx pop cx pop bx ret pnum endp rndgenseed proc push ax push bx push cx push dx mov ah, 2Ch int 21h mov ax, dx mov dx, 0 div rndmod inc dx mov rndseed, dx mov ax, rndmod mov dx, 0 div rndseed mov rnd_1, ax mov rnd_2, dx pop dx pop cx pop bx pop ax ret rndgenseed endp rndnum proc push ax push bx push cx push dx mov ax, rndcur mov dx, 0 idiv rnd_1 push ax; mov ax, rndseed imul dx mov bx, ax mov ax, rnd_2 pop dx imul dx sub bx, ax cmp bx, 0 jge pos add bx, rndmod pos: cmp bx, 0 jne notzero inc bx notzero: mov rndcur, bx pop dx pop cx pop bx pop ax ret rndnum endp rndarr proc push ax push bx push cx push dx ; Генерация случайного числа для длины массива call rndnum mov ax, rndcur cmp ax, maxarrlen jle shortenough mov dx, 0 mov bx, maxarrlen div bx mov ax, dx shortenough: mov arrlen, ax ; Заполнение массива случайными числами mov bx, offset arr mov cx, arrlen arrloop: call rndnum mov ax, rndcur mov [bx], ax add bx, 2 loop arrloop pop dx pop cx pop bx pop ax ret rndarr endp ; Подпрограмма вывода массива parray proc mov dx, cx printloop: mov ax, [bx] add bx, 2 call pnum call pspace mov ax, dx sub ax, cx push bx push dx mov dx, 0 mov bx, 5 div bx cmp dx, 4 pop dx pop bx je ifeq jmp ifend ifeq: call pnewline ifend: loop printloop call pnewline ret parray endp ; Основная программа main proc ; Установка регистров сегмента данных и стека push cs pop ds ; Генерация random seed call rndgenseed mov ax, rndseed mov cx, cnt mainloop: ; Генерация массива call rndarr ; Вывод информации о массиве mov ah, 9h mov dx, offset s_array int 21h mov ax, cnt sub ax, cx inc ax call pnum mov ah, 9h mov dx, offset s_length int 21h mov ax, arrlen call pnum mov ah, 9h mov dx, offset s_end int 21h ; Вывод массива push cx mov bx, offset arr mov cx, arrlen call parray call pnewline pop cx loop mainloop ; Завершение работы программы mov ah, 4ch int 21h main endp end main
теперь выходит другая ошибка
создается .com файл, код запускается
Ведь начало сегмента стека здесь не обозначено, ведь так?
push cs ; pop ds