汇编语言第四版(王爽)实验四

实验1

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

本质就是向一段连续的内存单元中传送一段连续的数据,所以我一开始就让段地址为0,再将偏移地址定义后递加。为了减少代码数量,让ax身兼两职:为ds赋值和当累加器。

assume cs:code

code segment
    mov ax,0
    mov ds,ax

    mov bx,200h
    mov cx,40h

s:  mov [bx],al
    inc bx
    inc ax

    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"。

显然只能在寄存器的一器多用上下文章,仔细观察发现,若将段地址置为20h,偏移地址与要传送的数据一样都是0~63。

assume cs:code

code segment
    mov ax,0020h
    mov ds,ax

    mov bx,0
    mov cx,40h

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,___
    mov ds,ax

    mov ax,0020h
    mov es,ax

    mov bx,0
    mov cx,___

s:  mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end

要复制指令,就要找到第一条指令所在位置,可知cs:ip指向的是第一条指令。第一个空填cs。cx是循环次数,将代码debug运行一下,看到"mov ax,4c00h"之前占了多少空间

占了17个字节,所以cx后面填17

assume cs:code
code segment
    mov ax,cs
    mov ds,ax

    mov ax,0020h
    mov es,ax

    mov bx,0
    mov cx,17

s:  mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end

(1)复制的是指令,从"mov ax,cs"到“loop s”从cs:ip开始,到cs:cx结束

(2)有17个字节,debug查看指令在内存中的存储情况可以得到

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值