返回介绍

第 5 章:[BX] 和 loop 指令

发布于 2024-10-04 13:37:13 字数 8390 浏览 0 评论 0 收藏 0

问题 5.1

指令axbxds内存
mov ax,2000H2000//
mov ds,ax/2000
mov bx,1000H1000
mov ax,[bx](21000) = 00BE
inc bx1001
inc bx1002
mov [bx],ax(21002)=00BE
inc bx1003
inc bx1004
mov [bx],ax(21004)=00BE
inc bx1005
mov [bx],al(21005)(byte)=BE
inc bx1006
mov [bx],al(21006)(byte)=BE

内存中的情况

地址(Hex)
21000BE
2100100
21002BE
2100300
21004BE
2100500->BE
21006BE
21007

实验 4 [bx] 和 loop 的使用

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

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

    mov bx,0
    mov cx,64

s:    mov [bx],bx
    inc bx
    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”。

答案:同(1)。

(3)下面的程序的功能是将 “mov ax,4c00h " 之前的指令复制到内存 0:200 处,补全程序。上机调试,跟踪运行结果。

assume cs : code
    code segment

    mov ax,cs            ; 程序入口为cs:0(ip=0),所以第一空处传递段地址为cs
    mov ds,ax
    mov ax,0020h
    mov es,ax
    mov bx,0
    mov cx,0017h         ; 先将第二空位随便设为1,加载后观察 mov ax,4c00h 之前代码
                         ; 为0000~0016h,总长度为23.

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

    mov ax,4c00h
    int 21h

code ends
end

提示:

(1)复制的是什么?从哪里到哪里?

答案:复制的是存放程序代码的数据。从 XXXX:0h~XXXX:17h

(2)复制的是什么?有多少个字节?你如何知道要复制的字节的数量?

答案:复制的是程序代码的数据。23个字节。先将第2个补全空位随便设为1,编译链接汇编代码后,debug 可执行文件,用 u 观察 mov ax,4c00h 之前代码(为 0000~0016h,总长度为23)。

注:之后可以执行完程序(g 001ah),并查看 0:200 处的内容是否为该部分代码(u 0:200)。

参考资料

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文