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

文章讲述了在限制指令数量的条件下,如何通过编程实现数据复制到特定内存地址,以及如何确定复制的字节数。重点讨论了如何利用现有指令如`mov`,`inc`,和`loop`来完成任务。
摘要由CSDN通过智能技术生成

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

第一题与第二题的答案一样,故写在一起。

assume cs:code

code segment
 
    mov ax,0020H
    mov ds,ax
    mov bx,0
    
    mov cx,64
  s:mov ds:[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,16H
  s:mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s
    
    mov ax,4c00H
    int 21h
    
code ends

end

Debug前内存 0:200 处的内容均为空,如下图所示:
first
Debug后,内存 0:200 处的内容如下所示:
second
问题:
(1)复制的是什么?从哪里到哪里?

复制的是 CS:IP 所指向的内存地址的数据。由下图可以看出,CS:IP 的初始指向位置是 076A:0000 。所以是从内存地址 076A:0000 处复制到内存 0:200 处。
third

(2)如何知道要复制的字节数量?

两种方式。
方式一,
随便给 cx 寄存器传送一个值,然后通过 Debug 该程序,来直接查看该程序所占字节数量。
方式二,
通过计算获取程序的字节数量。因为不同的指令占的字节数是固定的,以本题程序为例。

    mov ax,cs	;占两个字节
    mov ds,ax	;同上
    mov ax,0020H	;占三个字节
    mov es,ax	;占两个字节
    mov bx,0	;占三个字节
    
    mov cx,16H	;占三个字节
  s:mov al,[bx]	;占两个字节
    mov es:[bx],al	;其中段前缀占一个字节,mov [bx],al 占两个字节
    inc bx	;占一个字节
    loop s	;占两个字节

根据以上统计发现可知,
对于 mov 指令而言,如果其中有一个参数为常数或含有段前缀,则其三个字节,其余情况为两个字节。
而 inc 指令固定占一个字节,loop 指令固定占两个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值