【汇编】编程从键盘输入一个一位十六进制数,定义一个子程序将其以二进制形式输出到屏幕

参考程序;从键盘输入一个一位十进制数,定义一个子程序将其以二进制形式输出到屏幕DATASEGMENT;定义源数据段,数据段名称为DATAMSRDB"PLEASEINPUT... 参考程序
;从键盘输入一个一位十进制数,定义一个子程序将其以二进制形式输出到屏幕

DATA SEGMENT ;定义源数据段,数据段名称为DATA
MSR DB"PLEASE INPUT DATA:$"
DATA ENDS

CODE SEGMENT ;定义代码段, 代码段名称为CODE
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA ;装载数据段
MOV DS,AX

MOV AX,0000H
MOV AH,09H ;显示提示信息PLEASE INPUT DATA:
MOV DX,OFFSET MSR
INT 21H

MOV AH,01H ;从键盘输入一个一位十进制数,该数据保存在AL中
INT 21H
MOV BL,AL ;将AL寄存器的数值存放到BL寄存器中
SUB BL,30H ;求出该十进制数

MOV AH,02H ;输出回车符号
MOV DL,0Dh
INT 21H

MOV AH,02H ;输出换行符号
MOV DL,0Ah
INT 21H

CALLXIANSHI ;调用子程序
JMP TUICHU ;跳到退出程序

XIANSHIPROC ;子函数定义

;PUSH xx ;如果需要保护现场,寄存器压入堆栈,保护寄存器初始值

MOV CX,0000H ;输入循环次数
MOV CL,08H

AG: ;将BL寄存器中的数值以二进制形式输出
ROL BL,1 ;循环左移一位,后最高位进入C标志
JC PRINT1 ;C标志为一,跳到PRINT-1输入1,否则向下执行输出0
MOV DL,30H
MOV AH,02H
INT 21H
DEC CX ;CX寄存器的值减一
JNZ AG ;CX寄存器的不等于1,继续执行AG,否则跳到TUI
JMP TUI
PRINT1:
MOV DL,31H
MOV AH,02H
INT 21H

DEC CX
JNZ AG
TUI: ;POP XX ;恢复现场
RET
XIANSHI ENDP

TUICHU:
MOV AH,4CH ;返回DOS状态,固定结构
INT 21H
CODE ENDS
END START
展开
 我来答
做而论道
高能答主

2014-05-18 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
输出二进制的子程序,其实是很简单的。

DATA SEGMENT ;定义源数据段,数据段名称为DATA
MSR DB"PLEASE INPUT DATA:$"
DATA ENDS
CODE SEGMENT ;定义代码段, 代码段名称为CODE
ASSUME CS:CODE,DS:DATA
START:
MOV AX, DATA ;装载数据段
MOV DS, AX
MOV AH, 09H ;显示提示信息PLEASE INPUT DATA:
MOV DX, OFFSET MSR
INT 21H
MOV AH, 01H ;从键盘输入一个一位十进制数,该数据保存在AL中
INT 21H
MOV BL, AL ;将AL寄存器的数值存放到BL寄存器中
MOV AH, 02H
MOV DL, 0DH ;输出回车符号
INT 21H
MOV DL, 0AH ;输出换行符号
INT 21H

CALL XIANSHI ;调用子程序

MOV AH, 4CH ;返回DOS状态,固定结构
INT 21H
;-----------------------------------
XIANSHI PROC ;子函数定义

;将BL寄存器中的数值以二进制形式输出

MOV AH, 02H
SUB BL, 30H ;求出该十进制数
MOV CX, 8 ;循环次数
AG:
MOV DL, '0'
ROL BL, 1 ;循环左移一位,后最高位进入C标志
JNC PRINT1 ;C标志为0,跳到PRINT输出0
INC DL ;否则就输出1
PRINT1:
INT 21H
LOOP AG
RET
XIANSHI ENDP
;-----------------------------------

CODE ENDS
END START
fastfs
2014-05-14 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:802万
展开全部
调试通过!
DATA SEGMENT ;定义源数据段,数据段名称为DATA
MSR DB"PLEASE INPUT DATA:$"
DATA ENDS

CODE SEGMENT ;定义代码段, 代码段名称为CODE
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA ;装载数据段
MOV DS,AX

MOV AX,0000H
MOV AH,09H ;显示提示信息PLEASE INPUT DATA:
MOV DX,OFFSET MSR
INT 21H

MOV AH,01H ;从键盘输入一个一位十进制数,该数据保存在AL中
INT 21H
cmp al,'0'
jb TUICHU
cmp al,'9'
jbe s1
cmp al,'A'
jb TUICHU
cmp al,'F'
jbe s2
cmp al,'a'
jb TUICHU
cmp al,'f'
jbe s3
jmp TUICHU

s1:
MOV BL,AL ;将AL寄存器的数值存放到BL寄存器中
SUB BL,30H ;求出该十进制数
jmp s4
s2:
mov bl,al ;将al里的值放到BL寄存器
sub bl,'A' - 10 ;求出该十进制数
jmp s4
s3:
mov bl,al
sub bl,'a' - 10
s4:
MOV AH,02H ;输出回车符号
MOV DL,0Dh
INT 21H

MOV AH,02H ;输出换行符号
MOV DL,0Ah
INT 21H

CALL XIANSHI ;调用子程序
JMP TUICHU ;跳到退出程序

XIANSHI PROC ;子函数定义

;PUSH xx ;如果需要保护现场,寄存器压入堆栈,保护寄存器初始值

MOV CX,0000H ;输入循环次数
MOV CL,08H
AG: ;将BL寄存器中的数值以二进制形式输出
ROL BL,1 ;循环左移一位,后最高位进入C标志
JC PRINT1 ;C标志为一,跳到PRINT-1输入1,否则向下执行输出0
MOV DL,30H
MOV AH,02H
INT 21H
DEC CX ;CX寄存器的值减一
JNZ AG ;CX寄存器的不等于1,继续执行AG,否则跳到TUI
JMP TUI
PRINT1:
MOV DL,31H
MOV AH,02H
INT 21H

DEC CX
JNZ AG
TUI: ;POP XX ;恢复现场
RET
XIANSHI ENDP

TUICHU:
MOV AH,4CH ;返回DOS状态,固定结构
INT 21H
CODE ENDS
END START
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式