
帮忙解释一段汇编代码,谢谢
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
请详细解释下这段代码 展开
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个字节单元的值的程序
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个字节单元的值的程序
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |