【发布时间】:2016-11-29 16:50:04
【问题描述】:
我正在 MASM x8086 中编写一个字节大小的多导数应用程序,它必须能够接收负系数。
我知道二进制可以用有符号和无符号形式表示。但我正在寻找一种接收有符号整数的方法,这样我就可以避免另一个数组。或者有没有办法将我的变量定义为有符号整数?
以下是我的整数输入程序。
TEN db 10 ;;; constant
num db ? ;;; coefficient
;;; bh is the degree
get_int PROC
lea si, string ; replaces the ? in the string with the degree
add si, 13h
mov dl, bh
add dl, 30h
mov [si], dl
mov ah, 09h
lea dx, string ; prompt
int 21h
mov ah, 0Ah
lea dx, buffString ; user input
int 21h
lea si, buffString ; point to count byte
inc si
mov ch, 00h ; cx = count
mov cl, [si]
add si, cx ; si points to end of string
mov dl, 00h ; hold result(dl)
mov bl, 01h ; hold 10^x (bl)
loop1:
mov al, [si] ; prep for char ---> number conversion
cmp al, '-'
je negativeSign
sub al, 30h ; convert
mul bl ; ax = al*bl
add dl, al ; sum of results
mov al, bl ; preload for instruction
mul TEN ; TEN is variable predefined as 10
mov bl, al
jmp overNegative
negativeSign:
mov dh, 00h
mov [si], dh
overNegative:
dec si
loop loop1 ; loop instruction uses cx as index counter once zero breaks
mov num, dl
ret
get_int ENDP
; output is num
【问题讨论】:
-
这其中的
c++部分到底是什么? -
删除了标签。没有 C++。
-
你在哪里处理'-'字符?你使用“双补码”吗?
-
我刚刚将我对“-”字符的测试添加到提供的代码中,现在我可以用正确的输出处理负输入,而没有负号。我了解什么是二进制补码,但不知道如何应用它。最好在我的 if else 语句中应用签名标志,然后在输出之前测试该标志?
-
我不明白这个问题。您声称知道有符号整数和无符号整数的二进制表示之间没有区别。那是对的。如果您将整数值解释为“有符号”,则高位是符号位:如果它是负数,则打开,如果它是正数,则关闭。否则,如果您将整数值解释为“无符号”,则高位只是存储数值数据的另一个位,从而增加了其总范围。因此,在汇编语言中询问“接收”有符号或无符号整数是绝对没有意义的。重要的是你如何解释指定的参数。