;子函数:输入双字节整数。值保存在主调函数传递过来的变量中,非数字字符都是结束符。
;入口参数:DS传递主调函数的段地址;DI传递双字节变量的地址
;用到的寄存器:ES,AX,DS,DI,SI,CX,BX,DX
;无符号双字节整型的范围0-65535
data2 SEGMENT
temp DB 32 DUP(0)
addr1 DW ?
temp2 DW ?
data2 ENDS
code2 SEGMENT
InINT PROC FAR ;input int
ASSUME CS:code2,DS:data2
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
PUSH SI
PUSH DS
PUSH ES
MOV AX,data2
MOV DS,AX
;
MOV [addr1],DI
LEA SI,temp
MOV CL,0 ;记录整数的位数
MOV BL,1 ;标示当前位是否位首位,目的是去掉前导0,若首位为0,则继续为首位。
again2_1:
MOV AH,01H
INT 21H
CMP AL,'0' ;非数字字符均为结束符
JB over2_1
CMP AL,'9'
JA over2_1
CMP BL,1 ;检测当前位是否位首位,否则继续检测是否位0
JNE notFirst
CMP AL,'0'
JE again2_1
notFirst:
MOV BL,0 ;将标志更改为“不是首位”
SUB AL,30H
MOV [SI],AL
INC SI
INC CL
JMP again2_1
over2_1:
CMP AL,0DH ;如果是以Enter结束输入,则先输出一个换行符
JNE notCR
MOV DL,0AH
MOV AH,02H
INT 21H
;转换成双字节整型
notCR: DEC SI
MOV WORD PTR ES:[DI],0
MOV AX,1
MOV [temp2],AX
again2_2:
MOV BL,[SI]
MOV BH,0
MUL BX
ADD ES:[DI],AX
MOV AX,[temp2]
MOV BX,10
MUL BX
MOV [temp2],AX
DEC SI
DEC CL
CMP CL,0
JNE again2_2
POP ES
POP DS
POP SI
POP DI
POP DX
POP CX
POP BX
POP AX
RET
InINT ENDP
code2 ENDS
汇编源码学习13-子函数模块-输入双字节整数
最新推荐文章于 2022-03-01 22:05:51 发布