簡體   English   中英

在程序集(80x86)中打印有符號和無符號編號有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM