使用汇编语言输入数字

时间:2016-03-08 05:33:01

标签: assembly x86 masm irvine32

我正在尝试使用Irvine32库以汇编语言输入用户的两个数字,但不知道如何。这就是我到目前为止所做的:

INCLUDE Irvine32.inc
.data

number1 WORD
number2 WORD

.code
main PROC



exit
main ENDP
END main

1 个答案:

答案 0 :(得分:2)

我不熟悉irvine,但是如何自己编写输入和解码程序呢?

DOS int 21 / a从标准输入读取一行,并将其放入缓冲区

从ascii到寄存器的解码是一个但更棘手;你必须走几个数字,然后通过改变当前值来逐个添加它们

这是一种方法,只是为了有一个想法: (对不起语法,max与masm不兼容,我仍然使用Eric Isaacson的A86汇编程序)

.org 0100
JMP start

buffer: db 10,"          "  ; space for 10 digits

; read input to buffer
input:  mov ah, 0ah         ; input value
        mov dx, buffer
        int 21h
        ret

; decode buffer to CX
decode: mov dx,0
        mov si, buffer+2
        mov cl, [buffer+1]    ; while (numChars>0)

decLoop: cmp cl,0
        je decEnd

        mov ax, dx          ; mul DX by 10
        shl ax, 2
        add ax, dx
        shl ax, 1
        mov dx, ax

        mov al,[si]        ; get current digit
        inc si             ; and point to next one
        sub al,'0'
        mov ah, 0
        add dx, ax          ; add the digit read

        dec cl              ; numChars--
        jmp decLoop
decEnd: ret


; main()
start:  call input
        call decode
        push dx
        call input
        call decode
        pop cx

        ; CX now holds first, DX second number
        ; feel free to do with em what you feel like

        int 20h             ; quit