我遇到了一个家庭作业的问题,要求我向用户询问从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
注意:您不能使用任何库函数
如果我的问题仍然不清楚,请告诉我,以便我可以尝试清楚地问我的问题,以便其他人可以理解。
谢谢!
答案 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