帮忙解释一段汇编代码,谢谢

DATASEGMENTDADB36H,51H,15H,87HDATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCODE... DATA SEGMENT
DA DB 36H, 51H, 15H, 87H
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK1
START: MOV AX, DATA
MOV DS, AX
MOV SI, 0
MOV BL, 10H
LOP: MOV DL, [SI]
MOV CL, 4
SHR DL, CL
CMP DL, 0AH
JC J1
ADD DL, 7
J1: ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, [SI]
AND DL, 0FH
CMP DL, 0AH
JC J2
ADD DL, 7
J2: ADD DL, 30H
MOV AH, 2
INT 21H
MOV DL, 20H
MOV AH, 2
INT 21H
INC SI
DEC BL
JNZ LOP
MOV AH, 4CH
INT 21H
CODE ENDS
END START
请详细解释下这段代码
展开
 我来答
百度网友8882490
2012-08-30 · TA获得超过1747个赞
知道小有建树答主
回答量:1190
采纳率:0%
帮助的人:1015万
展开全部
DATA SEGMENT ; 数据段
DA DB 36H, 51H, 15H, 87H ;
定义了从DA开始的4个字节
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
; 栈段
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,
SS:STACK1
START:
MOV AX, DATA ; 以下2句初始化数据段
MOV DS, AX
MOV SI, 0 ; si指向DA
MOV BL, 10H ;
bl里存存环次数,这里是10次,实际4次足矣,因为DA之后只有4个字节
LOP:
MOV DL, [SI] ;取出一个字节放进dl
MOV CL, 4 ;
cl=4
SHR DL, CL ; dl右移4位,取得高4位
CMP DL, 0AH
;和10比较*******************
JC J1 ; 如果小于10,跳到J1
ADD DL, 7 ; 否则加上7,再加后面的30H一共17=11H,11H+30H=47H = 'A',其他字符依次偏移
J1:
ADD DL, 30H ; 30H='0',加上这个量把dl低4位里的数字转成对应字符
MOV AH, 2 ; ah=2
INT 21H ; 2号功能调用输出dl里的字符
MOV DL, [SI] ; dl=[si]
AND DL, 0FH ;
取低4位
CMP DL, 0AH ; 从下面开始直到*****的那行和上面从*****开始以后的过程相同
JC J2
ADD DL, 7
J2: ADD
DL, 30H
MOV AH, 2
INT 21H
MOV DL, 20H
MOV AH, 2
INT 21H ;*******************************
INC SI ; si = si + 1
DEC BL ; bl = bl - 1
JNZ LOP ; if bl
<> 0 then 继续循环,输出下一个字节
MOV AH, 4CH ; 程序结束
INT 21H
CODE ENDS
END START
就是一个以16进制形式输出从DA开始10个字节单元的值的程序
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式