一个汇编小程序(高分,着急,希望好心人解答)

来源:百度知道 编辑:UC知道 时间:2024/09/19 15:56:24
0000 CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:EXTRA
0000 B8 ---- R START: MOV AX, DATA
0003 8E D8 MOV DS, AX
0005 B8 ---- R MOV AX, EXTRA
0008 8E C0 MOV ES, AX
000A C4 3E 001E R LES DI, LIST2 ;LIST2 address
000E C5 36 001A R LDS SI, LIST1 ;LIST1 address
0012 FC CLD ;D FLAG clear
0013 B9 000A MOV CX, 10 ;counter
0016 F3/ A4 REP MOVSB ;move 10 bytes
0018 90 NOP
0019 CODE ENDS
0000 DATA SEGMENT
ORG 10H
0010 313233343536 DATA1 DB '1234567890’
37 38 39 30 ;source
001A ---- 0010 R LIST1 DD DATA1
001E ---- 0020 R LIST2 DD DATA2
0022 DATA ENDS
0000 EXTRA SEGMENT
OR

1.程序结果是什么(DATA2的值)
本程序功能是:将DS:SI指向的10个数据复制到ES:DI中。
所以结果是:DATA2 DB '1234567890’
2.0005 B8 ---- R MOV AX, EXTRA
MOV AX, EXTRA是将EXTRA的段地址送AX。
EXTRA是一个段名称,它里面存的是段地址,具体值不能确定。
段地址:偏移地址(如DS:SI,ES:DI)就确定了具体的内存地址。
3.001A ---- 0010 R LIST1 DD DATA1
LIST1的地址是DS:1A,内容为DATA1的地址
4.
REP重复操作前缀与循环指令LOOP的区别是:LOOP循环指令先执行CX←CX-1,然后根据CX的值确定下一步的操作:如果CX=0,就退出循环,否则循环继续;而REP重复操作前缀是先检测CX,然后根据CX的值确定下一步的操作:如果CX=0,则退出REP,否则,CX←CX-1,执行REP后面的串操作指令。

呵呵,你这代码看的真心烦。。。。。建议你把前面的那些乱七八糟的东西去掉,机器码谁看的懂啊。。。。。

LIST1的地址是多少呢? 001A

先判断在cx-1