Как переделать сумму в разность? - Assembler
Формулировка задачи:
Здравствуйте. Есть работающий код, который складывает введенные числа. Подскажите, пожалуйста, как его переделать, чтобы он их вычитал? Замена add на sub не помогает.
.model small .stack 100h .data mess1 db "Vvedite chislo #1: ",'$' mess2 db "Vvedite chislo #2: ",'$' mess3 db "Result: ",'$' mess4 db "Oshibka vvoda $" crlf db 0Dh,0Ah,'$' n db 5 nlength db 0 ncontents db 5 dup (?) buff db 100 dup (0),'$' tablel db '0123456789ABCDEF' base dw 10 .code output PROC mov ah,9 int 21h ret output ENDP input PROC mov ah,0Ah int 21h ret input ENDP str2int PROC xor di,di xor ax,ax mov cl,nlength xor ch,ch xor bx,bx mov si,cx mov cl,10 next1: mov bl,byte ptr ncontents[di] sub bl,'0' jb error1 cmp bl,9 ja error1 mul cx add ax,bx inc di cmp di,si jb next1 ret error1: mov dx,offset mess4 mov ah,9 int 21h jmp exit str2int ENDP int2str PROC xor di,di mov cx,99 zeroizing: mov byte ptr buff[di],0 inc di loop zeroizing xor di,di mov di,offset buff+99 next2: xor dx,dx div base mov si,offset tablel add si,dx mov dl,[si] mov [di],dl dec di cmp ax,0 jnz next2 mov dx,di ret int2str ENDP start: mov ax,@data mov ds,ax mov dx,offset mess1 call output mov dx,offset n call input mov dx,offset crlf call output call str2int push ax mov dx,offset mess2 call output mov dx,offset n call input call str2int pop bx add ax,bx push ax mov dx,offset crlf call output mov dx,offset mess3 call output pop ax call int2str call output mov ah,1 int 21h exit: mov ax,4C00h int 21h end start
Решение задачи: «Как переделать сумму в разность?»
textual
Листинг программы
pop bx sub bx,ax push bx
Объяснение кода листинга программы
- Загрузка регистра BX значением из регистра AX (команда POP BX).
- Вычитание значения регистра AX из значения регистра BX (команда SUB BX,AX).
- Сохранение нового значения регистра BX в стеке (команда PUSH BX).