[英]What is the difference between printing signed and unsigned number in assembly (80x86)?
我有一個任務要使用一個現有的匯編程序,該程序會打印帶符號的數字(字大小),因此我需要對其進行更改,以便它可以打印帶符號的數字(字大小)...請幫助我理解它們之間的區別以及如何實現此目的。
那是打印簽名號碼的程序:
.model small
.stack 100h
.data
num dw -32768
numS db 6 dup(' '),'$'
.code
mov ax, @data
mov ds, ax
mov ax, num
mov bx, 10
mov si, offset numS+5
next:
cwd
idiv bx
cmp dx, 0
jge cont
neg dx
cont:
add dl, 48
mov [si], dl
dec si
cmp ax, 0
jz sof
jmp next
sof:
cmp num, 0
jge soff
mov byte ptr[si], '-'
soff:
mov ah, 9
mov dx, si
int 21h
.exit
end
謝謝!
由於您的單詞大小為16位,因此有符號數字的范圍為-32768至32767,其中無符號數字的范圍為0至65535。當您將num聲明為-32768時,計算機將其表示為十六進制為0x8000,如果它執行簽名操作將為-32768,但是如果執行未簽名操作則為+32768。
如果使用其他負數,例如-1,則十六進制為0xFFFF。 如果對其執行無符號操作,則它將被解釋為65535。
注意,idiv指令執行帶符號除法,而div指令執行無符號除法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.