用户使用汇编语言输入出生年份和当前年份的年龄计算器

时间:2014-07-04 00:45:41

标签: assembly

DOSSEG
    .MODEL SMALL
    .STACK 100h
    .DATA

UserName db "Name: $"
CLRF     db 10,13,"$"
inputName db 24 dup ("$")

CurYear db "Current Year: $"
inputCurrentYear db 8 dup ("$")

BirYear   db "Birth Year: $"
inputBirthYear db 8 dup ("$")   

outputName db "Hello, $"

.code
BEGIN:
mov ax,@data
mov ds,ax
mov es,ax

mov al,03h
mov ah, 00h
int 10h

;username input

NameInput:
lea dx,UserName
mov ah, 09h
int 21h

mov inputName,21
lea dx,inputName
mov ah,0ah
int 21h

lea dx,CLRF
mov ah,09h
int 21h

;current year

CurrentYear:
lea dx,CurYear
mov ah,09h
int 21h

mov inputCurrentYear,05
lea dx,inputCurrentYear
mov ah,0ah
int 21h

lea dx,CLRF
mov ah,09h
int 21h

;birth year

BirthYear:
lea dx,BirYear
mov ah,09h
int 21h

mov inputBirthYear,05
lea dx,inputBirthYear
mov ah,0ah
int 21h

lea dx,CLRF
mov ah,09h
int 21h

;subtraction

mov eax, inputCurrentYear
mov ebx ,inputBirthYear
sub eax,ebx



Output:
lea dx, outputName
mov ah,09h
int 21h

lea dx, inputName
mov ah,09h
int 21h

lea dx,CLRF
mov ah,09h
int 21h

mov ah,4ch
int 21h
end BEGIN

我需要帮助,因为我不知道如何将输出转换为十进制值

1 个答案:

答案 0 :(得分:0)

还必须转换十进制ASCII的输入以进行计算。第一步是从所有十进制ASCII数中减去30h,第二步是将基数为十的数字系统的所有单个数字的完整值的数字相乘。例如,第二个最低位必须乘以10,第三个最低位必须乘以100,依此类推。最后,我们必须将所有值一起添加。现在我们可以使用这个值了。

对于十进制输出,我们必须除以并将数字拆分成单独的数字,而不是我们必须添加到所有30h以将其转换为ASCII。例如,如果值是十进制1995,那么我们必须将此值除以十进制1000以分隔最高位数1.然后我们必须再次将该值除以100以分离9,依此类推。