09bbb
ASSUME CS:CODE,DS:DATA,SS:STACK
;定义栈段,用于临时存放输入的四位字符
STACK SEGMENT
DB 8 DUP(?)
STACK ENDS
;定义数据段,STR用于输出一段提示字符串
;PTR用于存放二进制输出结果
;TEM用于临时存放还原出的4位十进制输入数
DATA SEGMENT
STR DB "PLEASE INPUT:$"
PRT DB 19 DUP(' ')
TEM DW ?
DATA ENDS
;代码段
CODE SEGMENT
;数据段地址、栈段地址、栈顶指针初始化
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,8
;将STR偏移地址赋给DX
;调用9号中断用于显示从DS:DX开始的字符串,遇到$结束
LEA DX,STR
MOV AH,09H
INT 21H
;循环4次每次调用1号中断读取一个数字以ASCII码形式存入AL
;AL-30H得实际数字,PUSH入栈
MOV CX,4
L: MOV AH,01H
INT 21H
MOV AH,0
SUB AL,30H
PUSH AX
LOOP L
;循环四次,将数字依次取出,乘1、乘10、乘100、乘1000,还原成原4位十进制数存入[SI]
LEA SI,TEM
MOV WORD PTR [SI],0
MOV CX,4
MOV BX,1
L1: POP AX
MUL BX
ADD [SI],AX
MOV AX,BX
MOV BX,10
MUL BX
MOV BX,AX
LOOP L1
;为PRT末尾添加$用以识别字符串结束
MOV AX,[SI]
LEA BX,PRT
ADD BX,18
MOV BYTE PTR [BX],'$'
DEC BX
;除2取余,转换为ASCII码形式倒序存入PRT
MOV CX,2
L2: MOV DX,0
DIV CX
ADD DL,30H
MOV [BX],DL
DEC BX
CMP AX,0
JNE L2
;添加回车换行
MOV BYTE PTR [BX],13
DEC BX
MOV BYTE PTR [BX],10
DEC BX
;调用9号中断输出
LEA DX,PRT
MOV AH,09H
INT 21H
;如果想看到结果需要在本行加上这句:JMP $
;退出程序
MOV AH,4CH
INT 21H
CODE ENDS
END START
————————————华丽的分割线——————————
熬夜写的,希望采纳,话说我也是这学期刚学习汇编的