当前位置:编程学习 > 汇编语言 >>

汇编语言之数字输入

我自己编了一个程序,就是可以输入数字,比如468,先输一个8存在来,再输入6,然后乘以10,加上原来的8,再输入4,乘100,加原来的68。我主要想要做成一个子程序方便以后输入调用,不过现在通过不了,我想知道哪里错了,又应该怎么改。 ASSUME CS:CODE , DS:DATA ,SS:STACK DATA SEGMENT MSG2 DB 'the number is:$' MSG3 DB 13,10,'input error.$' X DW ? ;用x来储存变量 DATA ENDS STACK SEGMENT DB 50 DUP(0) STACK ENDS CODE SEGMENT START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV DX, OFFSET MSG2 MOV AH,09H INT 21H CALL _INPUT MOV AX,X CALL SHOW_AX EXIT: MOV AX,4C00H INT 21H ;输入一个数,数值保存在x中 _INPUT: MOV X,0 MOV BX,0 MOV CX,0 MOV DX,0 _INPUTS: MOV AH,01H INT 21H CMP AL,0DH JZ ASSEMBLE CMP AL,'0' JB IN_ERR ;小于'0'则跳转错误显示 CMP AL,'9' JBE SUB_30 IN_ERR: LEA DX,MSG3 ;mov dx,offset msg3 MOV AH,09H INT 21H JMP EXIT ;应该跳转到结束 SUB_30: SUB AL,'0' ;还原成数字 MOV AH,0 PUSH AX INC CX INC DX JMP _INPUTS ASSEMBLE: POP AX DEC CX PUSH CX _MUL: MOV BX,10 MUL BX LOOP _MUL ADD X,AX POP CX LOOP ASSEMBLE RET SHOW_AX: PUSH CX PUSH BX PUSH DX MOV CX,0 MOV BX,10 MOV DX,0 SHOW1: DIV BX PUSH DX INC CX CMP AX,0 JE SHOW2 JMP SHOW1 SHOW2: POP DX ADD DX,'0' MOV AH,02H INT 21H LOOP SHOW2 POP DX POP BX POP CX RET CODE ENDS END START
追问:ASSEMBLE:
              POP       AX
              DEC       CX
              PUSH      CX
       _MUL:  MOV       BX,10
              MUL       BX
              LOOP      _MUL
              ADD       X,AX
              POP       CX
              LOOP      ASSEMBLE
 我这么加不对么,十位次乘10,百位不应该乘100吗。。。。。。。。。我原来有2000的,现在只剩1100了,我要节约用嘛。。。。我现在又不挣财富值了,寒
答案:每次输入新值,应该把以前的输入,乘以10,再加上新值。 
参考:
http://hi.zhaoxi.net/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/e0908bf1971e64de7831aa4c.html
其他:输入一个字符:
 mov ah, 1
 int 21h
结果存在AL里。
输入字符串:
 mov dx, offset [字符串名]
 mov ah, 0ah
 int 21h
结果:(DS:DX):[最大字符数][实际输入的字符数][字符 ASCII 码][字符 ASCII 码]……。 你有不少财富,却如此小气...... 自己解决吧!!!

上一个:汇编语言可以吗?
下一个:汇编语言

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,