关于bx和loop的汇编习题

本文介绍了使用汇编语言进行内存操作的方法,包括如何向指定内存区间传送数据、如何使用较少指令实现相同功能以及如何复制指令到指定内存位置的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、向内存0:200~0:23F依次传送数据0~63(3FH),用汇编语言写出来
assume cs:code

code segment

    mov ax,0020h
    mov ds,ax 
    mov bx,0
    mov cx,64
    mov dx,0

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,0020h
    mov ds,ax 
    mov bx,0
    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, 17h ;填空处

s:   mov al,[bx]

     mov es:[bx],al

     inc bx

     loop s

     mov ax,4c00h

     int 21h

code ends

end

第一个空很好理解,因为我们要复制的是指令,当然是从要获取cs的段地址,接下来主要分析的就是第二个空

当我们写测试代码的时候,原本在程序中CX 给 10h的时候,用Debug将可执行文件加载进内存的时候CX的值为001C 为23个字节大小,减去mov ax,4c00h和int 21h 的5个字节大小,就为17h大小,也就是说为23个字节就可以复制完成。

这里写图片描述

之后我们将CX改为17h,执行结果如下所示,CX还是001C
这里写图片描述

紧接着我们再去执行指令,然后去查看0:200的汇编指令果然除了mov ax,4c00h之前的都复制进去了,如下图所示
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值