汇编语言x8086 - 获取用户输入

时间:2014-11-01 18:15:56

标签: assembly input x86-16 operations

我遇到了一个家庭作业的问题,要求我向用户询问从1位到5位的数字(例如,他们可以输入1,12,123,1234)我知道如何询问用户他们想要的任何数字,使用循环,然后使用mov ah,1h函数,但我想取用户的输入,让我们说123,然后将该数字存储在我已经创建的变量,Y。然后我想处理它,我已经知道如何处理数字,但只有当我已经在变量中声明了数字(Y dw 123),但是我必须要求用户输入,我必须保留未初始化的变量(Y dw?)。现在,自从我被困住后,我决定创建这个而不是" Y dw?"," Y dw 0,0,0,0,0",我这样做是为了我可以手动存储在Y变量中输入数字。

基本上,我想知道如何将用户输入的每个数字存储起来并将其存储在我的Y变量中,我可以使用它,只要它是" Y dw 123"

这是我到目前为止所做的:

title lab6 (lab6.asm)

.model small
.stack 100h
.data

    Y dw 0,0,0,0,0 ,0dh, 0ah
    W dw ?
    Sum dw ? 
    printSum db "The Sum is: "    
    sumMessage db 0,0,0,0,0     ,0dh, 0ah
    printW db "W is: " 
    wMessage db 0,0,0,0,0   ,0dh, 0ah, '$'  


.code
main proc
    mov ax,@data
    mov ds,ax

    mov bx, 0  
        mov si, 1
        loop1:
            mov ax, 0
            mov ah, 1h
            int 21h   
            cmp al, 0dh 
            je endloop 
            mov bl, al 
            mov Y+si, ax 
            inc si
        loop loop1
        endloop: 
        mov ax, 0    
       mov Y, bx   



    mov ax,Y     ;Store Y in ax register
    sub ax,1
    mov Y, ax
    mov ax, 0

    mov Sum,36         ; add 36 to Sum
    mov bx,Y
    add Sum,bx         ; add 36 and Y into Sum
    mov ax,Y

    mov bx,4            ; take Y and divide by 4
    mov dx,0
    idiv bx
    add Sum,ax  

    mov ax,Y           ;take Y and divide by 100
    mov bx,100
    mov dx,0
    idiv bx
    add Sum,ax  

    mov bx,7
    mov dx,0                        ; calculate W
    idiv bx
    mov W,dx
    add W,1
    mov dx, W    

    add dl, 30h
    mov wMessage+1, dl  

    mov ax, 0
    mov dx, 0 
    mov ax,Sum  
    mov cx, 10            ;start modding the number 2553
    idiv cx   

    mov si, 4

    sumLoop:                   ;Loop to mod and store 2553 into sumMessage
         add dl, 30h
         mov sumMessage+[si], dl 
         mov dx, 0 
         mov cx, 10 
         idiv cx
         dec si   
         cmp si, 0h
         je endSum

    loop sumLoop                

    endSum: 


    mov si, 0
    mov cl, printSum

    L1:                              ;Loop to print out "Sum is : 2553
        mov al, 0
        mov al, printSum[si]
        inc si 
        cmp al, '$'
        je end_loop
        mov dl, al   
        mov ah, 2h
        int 21h  

    loop L1:  

    end_loop:


    mov ax,4C00h
    int 21h

main endp  
end main

对于我现在的代码,如果我输入123作为用户输入,它给我的Sum是:0098,W是1,不应该是这种情况,Sum实际应该是0189,并且W是6.我也想知道如何取出领先的0。

以下是此作业的说明:

编写一个计算以下内容的程序:

Y =(获取用户输入)

Y = Y-1

总和= 36 + Y +(Y / 4)+(Y / 100)

W = Sum%7 + 1

输出W,Sum

注意:您不能使用任何库函数

如果我的问题仍然不清楚,请告诉我,以便我可以尝试清楚地问我的问题,以便其他人可以理解。

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试这样的输入数字:

        mov     cx, 10
        mov     bx, 0  
loop1:
        mov     ax,0100h
        int     21h   
        cmp     al,0dh 
        je      endloop
        and     ax,0fh
        xchg    ax,bx
        mul     cx
        add     bx,ax
        jmp     loop1
endloop: 
        mov Y, bx