汇编语言(王爽)--实验4 [bx]和loop的使用

本人使用的是emu8086软件完成的实验。


(1)编程,向内存0:200~0:23F依次传送数据0~63(3FH)

assume cs:code

code segment
    mov ax,0000H
    mov ds,ax
    mov bx,200H
    mov dx,0 
    mov cx,64
    s: mov [bx],dx
       inc bx
       inc dx
       loop s  
   mov ax,4c00h
   int 21h
code ends

end

 (2)编程:向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov  ax,4c00h”和“int 21h”

先看代码

assume cs:code

code segment
    mov ax,0000H
    mov ds,ax
    mov bx,200H 
    mov cx,64
    s: mov [bx],bl
       inc bx
       loop s  
   mov ax,4c00h
   int 21h
code ends

end

正是因为每次循环,偏移量和传送的数据是相等的,所以可以省去一个变量表示传送的数据。

(3)下面的程序的功能是将"mov ax,4c00h"之前的指令复制到了内存0:200处,补全程序。

assume cs:code
code segment
    mov ax,cs
    mov ds,ax
    mov ax,0020h
    mov es,ax
    mov bx,0
    mov cx,0FH
s:  mov al,[bx]  
    mov es:[bx],al
    inc bx
    loop s
    
    mov ax,4c00h
    int 21h
code ends

end

分析:该程序是将指令复制到了内存0:200,乍一听,感觉很懵逼。其实仔细结合前面的知识,也就很容易了。

首先,指令全部都是二进制表示。其次,cs:ip表示cpu执行指令的地址。所有,只要mov ax,cs 就能把该程序在内存里的首地址mov到ax了。

第二个空.cx的值,也就是loop循环执行多少次。当程序运行到第8行,也就是mov cx,__ 时,cs:ip是该指令的地址。也就是说,从程序开始IP=0,到第8行,IP的值可以用来表示该程序(需要复制的一部分)指令占多少字节。但是上机调试发现,IP的值是不能使用的。所有只能debug得到IP的值。

猜你喜欢

转载自blog.csdn.net/weixin_41256413/article/details/79624813