8086 I / O存储

时间:2014-05-02 05:07:11

标签: assembly io x86-16

我正试图在8086中读取键盘输入。 程序将接受两个输入(-127和127之间的整数)和一个操作数('*'或'+')。之后我将解决给定的表达式,并在其他提示下面打印出来

如何获取要执行操作的数字的实际值。当我读它时,它将其作为十六进制ascii值。数字a为负数或正数,可以是三位数

例如:

输入一个数字:5 输入另一个号码:4 操作:*

5 * 4 = 20


截至目前,我已经为每个输入创建了一个提示,并且可以正确读取它们,问题是,我该如何处理输入?如何将其用于操作以下是我的代码。提前谢谢。

;------------------------------------------------
stacksg segment     para stack'Stack'   ;define the stacks
db  32 dup(0)
stacksg ends
;------------------------------------------------
datasg segment para'Data'   ;data segment
paralist label byte
maxlen:   db    5  ;The maximum length of the string will be 20
actlen:   db    ?  ;Which character we have inputed now
buffer:   db    5("$")  ;The buffer where the string is buffered
prompt1 db "Enter the first number:$"
prompt2 db "Enter the second number:$"
prompt3 db "Enter the operation:$"
datasg ends
;-------------------------------------------------
codesg segment para'Code'   ;code segment
            main  proc  far             ;main procedure
    assume ss:stacksg, ds:datasg, cs:codesg ;define segment register
    mov     ax,datasg   ;initialize data segment register
    mov     ds,ax
    mov     es,ax

    mov ah, 06h ;scroll screen  
    mov al, 0   ;num of rows
    mov cx, 0   ;start row
    mov dh, 24  ;end row
    mov dl, 79  ;end col
    mov bh, 30h ;color
    int 10h     ;screen interrupt

    mov ah, 02h
    mov bh, 00h
    mov dh, 10
    mov dl, 20
    int 10h

        ;The First Number
    mov ah,09h
    lea dx,prompt1
    int 21h ;First Input 
    mov ah,0ah
    lea dx,paralist
    int 21h
        mov     ax,4c00h    ;end processing
    int     21h

main    endp                ;end of procedure
codesg  ends                ;end of code segment
    end     main        ;end of program

2 个答案:

答案 0 :(得分:1)

从您获得的值中获取数字减去48的数值(或减去与ASCII字符“0”对应的值)。将此应用于您的每个数字,您就可以开始了。请参阅ASCII table以供参考。

答案 1 :(得分:-1)

将运算符与'+'进行比较。如果相等,请添加两个值。如果不相等,则将两个值相乘。打印结果。

让我填补一些空白。您需要一个循环将字符转换为数字

如果第一个字符是' - ',请将值设置为-1,否则将其设置为1.

a)从每个字符中减去“0”并将结果乘以。

如果有更多字符,则将结果乘以10并转到a)。