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

————————————华丽的分割线——————————

熬夜写的,希望采纳,话说我也是这学期刚学习汇编的