2016-11-29 5 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

' - ' charはどこで扱いますか?あなたは "2つの補数"を使用していますか? – 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