微机实验模版 联系客服

发布时间 : 星期一 文章微机实验模版更新完毕开始阅读

程序段2:

MOV [2008H],4455H MOV SI,1000H MOV DI,2000H MOV CX,10H REPZ CMPSW 程序段2执行后:

(1) ZF=? 根据ZF的状态,你认为两个串是否比较完了?

ZF=0,根据ZF=0可判断结束比较的原因是不满足前缀所要求的条件,即两个比较的串出现不相等数据

(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。

SI=100AH,DI=200AH,CX=0BH

执行带条件重复前缀REPZ的串比较指令时,ZF=0或者CX=0都会结束比较。由于对ES:[2008H]字单元重新赋值,使得顺次比较时,与DS:[1008H]字单元的内容不再相等,ZF=0,不满足前缀条件REPZ,则结束比较。题中找到不相等的数据4455h后,结束比较可知共执行比较操作次数为5次,每执行一次操作,DI和SI自动按字量修改长度,减2,CX减1,所以SI=1000H+2*5D=100AH,DI=2000H+2*5D=200AH,CX=10H-5=0BH

程序段3: MOV AX,4455H MOV DI,2000H MOV CX,10H REPNZ SCASW 程序段3执行后:

(1) ZF=? 根据ZF的状态,你认为在串中是否找到了数据4455H?

ZF=1,只有找到关键字时才会有ZF=1,从而不满足前缀条件,退出REPNZ SCASW串循环,

(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。

SI=100AH,DI=200AH,CX=0BH

SCASW指令是将AX中的值与目标串ES:[DI]中的值进行比较,所以SI不发生变化。ES:[2008H]=4455H,与AX中数据相等,所以比较到ES:[2008H]后,结束比较,共比较5次,DI=2000H+2*5D=200AH,CX=10H-5D=0BH。

4.从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。

data segment str db 'This is a string'; add your data here! pkey db \ends stack segment dw 128 dup(0) ends code segment start: ; set segment registers: mov ax, data mov ds, ax mov es, ax mov ss, ax lea ax,str

mov bx,1000h mov si,ax mov di,bx mov cx,10h rep movsb mov di,0fh mov si,0 mov cx,10h move: mov bp,1000h mov bx,2000h mov al,[bp][si] mov [bx][di],al inc si dec di dec cx jnz move lea dx, pkey mov ah, 9 int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h ends end start ; set entry point and stop the assembler.