当前位置:编程学习 > 汇编语言 >>

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

补充: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 请详细解释下这段代码
答案: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个字节单元的值的程序

上一个:汇编,关于adc指令的用法
下一个:汇编在电脑上怎么调出来啊,是电脑自带的还是要下载软件啊

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,