2016-11-29 73 views
0

我正在編寫MASM x8086中的一個字節大小的多派生應用程序,它必須能夠接收負係數。負數MASM輸入和輸出

我知道二進制文件可以用有符號和無符號的形式表示。但我正在尋找一種方法來接收一個有符號的整數,以便我可以避免另一個數組。或者有沒有辦法將我的變量定義爲有符號整數?

下面是我的整數輸入程序。

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 
+0

到底是什麼'C++'的一部分? –

+0

刪除了標籤。沒有C++。 – TheLiquor

+0

你在哪裏處理' - '字符?你使用「二補」嗎? – Ripi2

回答

1

當解釋輸入時,您偶然發現「 - 」字符,這是一個保存假設,您已達到數字的開頭。所以你應該退出循環。我沒有看到用零代替「 - 」字符的任何意思!

你需要做的是否定以獲得正確的符號結果數:

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 
dec si 
loop loop1   ; loop instruction uses cx as index counter once zero breaks 

mov num, dl  ;Positive number [0,127] 
ret 

negativeSign: 
mov dh, 00h  <<<<<<< Need this as a flag? 
neg dl 
mov num, dl  ;Negative number [-128,-1] 
ret