Assembly 汇编语言如何使两个输入的数字成为一个?

Assembly 汇编语言如何使两个输入的数字成为一个?,assembly,x86,tasm,Assembly,X86,Tasm,我正在尝试使用以下条件进行汇编语言编程: if age = 18 then write "You are of legal age" else if age<18 then write "You are too young" else write "You should be working now" 当我输入两位数时,有两个不同的AL值。我将第一个值移动到BL以保存它,但我不知道下一步该怎么做。我能问一下如何让它们结合起来吗?当我输入“17”时,是17小时。我

我正在尝试使用以下条件进行汇编语言编程:

    if age = 18 then write "You are of legal age" 
    else if age<18 then write "You are too young"
    else write "You should be working now"

当我输入两位数时,有两个不同的
AL
值。我将第一个值移动到
BL
以保存它,但我不知道下一步该怎么做。我能问一下如何让它们结合起来吗?当我输入“17”时,是17小时。我读过,我需要减去30小时,但这只适用于0-9。我不知道从10号开始该怎么办。我在用Tasm


希望有人能帮助我。

若要将两位输入存储为一位,请尝试以下操作

num db 0     ;declare a variable to store the two digit input
ten db 10     ;declare a variable that holds a value 10

mov ah,01h  ;This is the first digit
int 21h
SUB al,48D     ;subtract 48D 
MUL ten        ;multiply with 10 because this digit is in ten's place
mov num,al    ;mov first digit input in num

mov ah,01h  ;This is the second digit
int 21h
SUB al,48D 
ADD num,al   ;add second digit to num
现在,您的两位数位于变量
num


请注意,我将第一个数字输入乘以10,但我没有将第二个数字输入乘以任何东西,因为它位于一个人的位置。

您真正应该做的是使用缓冲输入(INT 21h;AH=0Ah)一次读取两个字符。这将比一次读取一个字符并连接它们更容易实现,也更典型。”…我输入“17”,它将是17h“你确定h后缀是正确的吗?文本“17”转换为十进制的17,但转换为十六进制的11h!“当我输入17时,我能问一下如何使它们结合在一起,这将是17小时吗?”你没有回答这部分问题!请把这个加在你的答案上,值得我投一票。只需要几行代码…@Fifoernik编辑了我的答案。一个真正的汇编专业人士不需要乘以10,而是右移2加两个加法,例如,
leaxx,[xx+xx*4];添加xx,xx
@CodyGray:16位代码中的PITA非常大,特别是在避免使用32位寻址模式的情况下。在可以假设为286的16位代码中,我倾向于写
sub al,'0'
/
imul bx,ax,10
/获取下一个数字/。。。。这当然会给伯克希尔哈撒韦留下很高的垃圾,但我们不在乎这一点。(不可用。)但是,LEA允许您同时从ASCII转换为整数:
LEA bx、[eax+eax*4-'0'*5]
\@令人惊讶的是:无论哪种方式,在完成计算之前都不要将其写入内存。这就是寄存器的作用。而且,我是唯一一个发现把十进制常量写成
48D
会让人分心/困惑的人吗?我的意思是,我的大脑希望它是一个十六进制常数,因为它是数字和十六进制数字(特别是D)的混合体。特别是在这种情况下,当
'0'
(甚至
30h
)或将是一种更清晰的写入方式。
num db 0     ;declare a variable to store the two digit input
ten db 10     ;declare a variable that holds a value 10

mov ah,01h  ;This is the first digit
int 21h
SUB al,48D     ;subtract 48D 
MUL ten        ;multiply with 10 because this digit is in ten's place
mov num,al    ;mov first digit input in num

mov ah,01h  ;This is the second digit
int 21h
SUB al,48D 
ADD num,al   ;add second digit to num