ここに電卓コードの短い部分があります。負の数で算術演算を実行する方法について助けを求めたいです。
これが私のコードです:
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 の補数のコードです。どこから、どのように開始すればよいかわかりません。私はアセンブリプログラミングに本当に慣れていません。あなたが私を助けてくれることを願っています。
試したコードは次のとおりですが、機能しません。理解を深めるために個別に配置します。
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