我这里有一小部分计算器代码。我想就如何使用负数执行算术运算寻求帮助。
这是我的代码:
ASSCII_LOOP : MOV EDX , 0
DIV ECX
OR DL , 30H ;MAKE REMINDER ASSCII
MOV [ESI] , DL ;PUT ASSCII IN ASSCII_NUM
DEC ESI
INC EBP ;ADD ONE TO THE CHAR'S COUNTER
CMP EAX , 0 ;IF AX > 0 GOTO
JA ASSCII_LOOP ;ASSCII_LOOP
CMP EDI , 0 ;CHECK IF THAT WAS A NEGETIVE NUMBER
JZ REST ;IF THATS NOT NEGETIVE GOTO REST
MOV DL , '-'
MOV [ESI] , DL ;ADD A MINES SIGN TO THE STRING
DEC ESI
INC EBP
REST :
LEA EDI , ASSCII_NUM
;MOVE THE ASSCII CODE TO IT'S RIGHT PLCAE IN ASSCII_NUM
ORDER_ASSCII : INC ESI
MOV AL , BYTE PTR [ESI]
MOV BYTE PTR [EDI] , AL
INC EDI
DEC EBP
CMP EBP , 0
JA ORDER_ASSCII
MOV CL , '$'
MOV BYTE PTR [EDI] , CL ;AT LAST PUT A DOLLOR SIGN AT THE END OF ASSCII_NUM
该程序检查输入是否为负,如果为负则转到 REST。我想问以下问题:
* REST 在这个程序中的作用是什么?
*我想请教一下如何开始在这个程序中编写代码来对负数进行操作。我已经知道 2' 补码的事情,我想要的是 2's 补码的代码,我只是不知道从哪里开始,如何开始。我对汇编编程真的很陌生。希望你能帮助我。
这是我尝试过的代码,但它不起作用,我将其单独放置以便更好地理解:
neg_num:
mov ax, data
mov ds, ax
mov es, ax
mov ah, 0000h
mov al, num
NOT al
mov bl, al
adc al, 00000001B
mov bl, al