| Код | STACKS SEGMENT PARA STACK 'STACK' DB 512 DUP (?) STACKS ENDS DATA SEGMENT PARA 'DATA' STR1 DB 'VVEDITE 1-oe znakovoe chislo $' STR2 DB 'VVEDITE 2-oe znakovoe chislo $' STR3 DB 'min chislo $' chislo1 dw ? chislo2 dw ? BUF DB 20,?,20 DUP ('$') buf2 db 20,?,20 dup ('$') DATA ENDS CODE SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CODE,DS:DATA,SS:STACKS entr PROC NEAR ;процедура перехода на новую строку MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H RET entr ENDP MAIN PROC FAR; MOV AX,DATA MOV DS,AX vvod_1: ;----------------- MOV AH,9 ;код функции (вывод строки) MOV DX,OFFSET STR1 INT 21H ;----------------- CALL entr ; Переход на новую строку MOV AH,0AH; MOV Dx,OFFSET BUF; это работа с буфером, его заполняем строкой mov chislo1,dx INT 21H MOv AX,0 MOV Al,BYTE PTR BUF+1 ;помещение длины строки в AX cmp al,1 ;сравниваем длину строки Ja otriz ;если больше 1, то это отрицательное число polog: cmp buf+2, 30h ;защита от дурака, т.е. если код символна меньше кода 0, то повторно вводим jb vvod_1 cmp buf+2, 39h ;аналогично с кодом 9 ja vvod_1 mov al, byte ptr [buf+2] sub al, 30h cbw mov chislo1, ax jmp end_if otriz: cmp al,2 ;сравниваем длину с 2 je otriz1 ; если равно 2 то это отрицательное и тогда проверяем jmp vvod_2 otriz1: cmp buf+2, 2dh ;сравниваем первый символ с кодом "-" jne vvod_1 cmp buf+3, 2dh ;защита от дурака, чтобы не вводили "--" je vvod_1 mov al, byte ptr [buf+3] sub al, 30h neg al cbw mov chislo1, ax end_if: CALL entr ; Переход на новую строку ;----------------- vvod_2: ;----------------- MOV AH,9 ;код функции (вывод строки) MOV DX,OFFSET STR2 mov chislo1,dx INT 21H ;----------------- CALL entr ; Переход на новую строку MOV AH,0AH; MOV DX,OFFSET BUF; это работа с буфером, его заполняем строкой INT 21H ;------ аналогично для второго числа проверяем. MOv AX,0 MOV Al,BYTE PTR BUF+1 ;помещение длины строки в AX cmp al,1 ;сравниваем длину строки Ja otriz11 ;если больше 1, то это отрицательное число polog1: cmp buf+2, 30h ;защита от дурака, т.е. если код символна меньше кода 0, то повторно вводим jb vvod_2 cmp buf+2, 39h ;аналогично с кодом 9 ja vvod_2 mov al, byte ptr [buf+2] sub al, 30h cbw mov chislo1, ax jmp end_if1 otriz11: cmp al,2 ;сравниваем длину с 2 je otriz21 ; если равно 2 то это отрицательное и тогда проверяем jmp vvod_2 otriz21: cmp buf+2, 2dh ;сравниваем первый символ с кодом "-" jne vvod_2 cmp buf+3, 2dh ;защита от дурака, чтобы не вводили "--" je vvod_2 mov al, byte ptr [buf+3] sub al, 30h neg al cbw mov chislo1, ax end_if1: CALL entr ; Переход на новую строку ;вот тут начались проблемы. не понимаю как вывести и сравнить. почитал про вывод знаковых не понял. CALL entr ; Переход на новую строку MOV AH,2 ; MOV Dx,chislo1 ;Вывод на экран num1 ADD Dx,30h ; INT 21h CALL entr MOV AH,9 MOV DX,OFFSET STR3 ;ВЫВОД СТРОКИ С ПОМОЩЬЮ Ф.9 INT 21H mov ax,chislo1 cmp ax,chislo2 Jg proc_min_out jl proc_min_out1 MOV AH,2 MOV DX,ax;ВЫВОД СТРОКИ С ПОМОЩЬЮ Ф.9 INT 21H proc_min_out: MOV AH,2 mov cx,chislo2 MOV DX,cx;ВЫВОД СТРОКИ С ПОМОЩЬЮ Ф.9 add dx,30h INT 21H mov ah,4ch int 21h jmp endid proc_min_out1: MOV AH,2 mov cx,chislo1 MOV DX,cx;ВЫВОД СТРОКИ С ПОМОЩЬЮ Ф.9 add dx,30h INT 21H mov ah,4ch int 21h jmp endid endid: MAIN ENDP CODE ENDS END MAIN END MAIN
|
вот тут подправил. но сравнивает не правильно(тупо второе число выводит) и я не пойму как вывести число(( помоги пожалуйста |