汇编语言之数字输入
我自己编了一个程序,就是可以输入数字,比如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 码]……。 你有不少财富,却如此小气...... 自己解决吧!!!
上一个:汇编语言可以吗?
下一个:汇编语言