编写程序,从键盘输入数字字符(例如‘1’‘2’‘6’‘a’),在程序中得到对应的数值(126),在利用1中的输出功能,将得到的数值输出显示。
需要注意的是,可能输入的第一个字符就不是数字,这时候直接输出0 代码分两半,一半是输入(乘10+下一位求出输入数字),一半是输出(除10,余数入栈;出栈),
DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ; 数值存储 MOV BX, 0 ; 倍数存储 MOV CL, 10 ; 输入 MOV AH, 1 INT 21H ; 和0比较 CMP AL, '0' JB L3 ; 和9比较 CMP AL, '9' JA L3 ; 暂存输入 MOV BL, AL SUB BL, 48 L2: ; 输入 MOV AH, 1 INT 21H ; 和0比较 CMP AL, '0' JB L3 ; 和9比较 CMP AL, '9' JA L3 ; 暂存输入 MOV DL, AL SUB DL, 48 ; 将CL移到AL中做乘法 MOV AL, BL ; 除数赋值 MOV CL, 10 ; 乘法 MUL CL ; 将AL取出 MOV BX, AX MOV DH, 0 ; 加暂存输入 ADD BX, DX ; 继续输入 JMP L2 L3: ; 存数字 MOV AX, BX ; 计数器 MOV BH, 0 ; 除数赋值 MOV CL, 10 L0: ; 除法 DIV CL ; 入栈 PUSH AX ; 将AH置0 MOV AH, 0 ; 计数器加1 ADD BH, 1 ; 如果商大于0 CMP AL, 0 ; 跳转 用AX(商)继续做除法 JA L0 L1: ; 否则 开始输出 POP DX MOV DL, DH ADD DL, 48 MOV AH, 2 INT 21H ; 计数器减1 SUB BH, 1 ; 做判断 CMP BH, 0 ; 大于0 JA L1 MOV AH,4CH INT 21H CODES ENDS END STARTPS:由于本人不知道里编译汇编的代码块怎么写,网上也没找到答案,就随便找了一个看着舒服点的,有知道的同学请评论,有偿,您会获得博主好感度+1,或者+100也行🥰