解题思路:
1:需要知道输入的数据是以ASCII码接收的比如运行print.exe输入字符A,对应的ASCII码41H就被传入到程序中
2:运用JNC指令判断执行SHL指令后CF的值的大小,如果CF=0就直接输出DL=0,如果CF!=0就继续执行以下操作让DL=DL+1,在输出DL=1。
3:2操作过程用loop指令重复八次,依次输出八个值就是字符的二进制编码
熟悉掌握系统功能调用,和指令的运用,对题目要有清晰的解题思路
print.asm文件
CSEG SEGMENT
ASSUME CS:CSEG
MAIN: MOV AH,01H ;3,4行作用:系统功能调用01H作用:键盘输入字符串,入口参数无,出口参数AL=输入字符
INT 21H
MOV BL,AL ;5行作用:AL中存放字符的ascii码的数据送入BL中
MOV DL,' ' ;6行作用:未知数存放到DL中为下两行做铺垫
MOV AH,02H ;7,8行作用:系统功能调用02H作用:显示输出字符串,入口参数DL=想要输出字符,出口参数无
INT 21H
MOV CX,8 ;9行作用:把8以二进制形式存入到CX中
AGAIN:MOV DL,'0' ;10行作用:设置一个AGAIN标号(标号是一条指令的符号地址,代表该指令的第一个字节地址)并把字符串0以ASCII码的形式放入到DL中
SHL BL,1 ;11行作用:SHL指令作用:把BL中的数左移一位
JNC DISPALY ;12行作用:JNC指令作用:如果CF=0,就跳转到DISPALY标号所在的指令处,不等于CF!=0就继续执行13行操作
INC DL ;13行作用:INC 指令作用:DL自身加一,结果还是存入到DL中
DISPALY:MOV AH,02H ;14,15行作用:设置一个DISPALY标号,并通过系统功能调用02H,显示输出字符串,入口参数DL=想要输出字符,出口参数无
INT 21H
LOOP AGAIN ;16行作用:当cpu执行loop指令的时候分两步,首先cx=cx-1,然后再判断cx中的数据是否为零,然后决定是继续执行循环的部分还是向下执行
MOV AH,4CH ;17,18行作用:调用系统功能调用4CH作用:程序结束后退出,入口参数AL=返回码,出口参数无
INT 21H
CSEG ENDS
END MAIN
运行结果