实验一 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403H。

代码实现

    assume cs:code
    code segment
          mov ax,0b800h
          mov ds,ax
          mov bx,07b8h
          mov cx,16
    s:  mov ax,0403h
 mov [bx],al
 inc bx
 loop s

 mov ax,4c00h
 int 21h
    code ends
    end

编译连接运行结果

0403h-->0401h,图形颜色不变,改变了形状。

改为0402h

改变了是否填充,具体原因在我的实验三博客中详细解释过

实验二 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据

0~63(3FH)。

源码

编译连接无错误

-p命令调试

d命令查看(200-23f已成功修改)

实验三

assume cs:code
code segment  
    mov ax,cs ;cs是指向程序代码段的地址
    mov ds,ax ;赋给代码段地址
    mov ax,0020h
    mov es,ax ;20h赋拓展段地址
    mov bx,0
    mov cx,0;不确定占了多少字节,先把cx赋值为0;
 s: mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s
    mov ax,4c00h
    int 21h
code ends
end

由于不确定指令占用多少字节,现在将 cx 的值设为 0 并编译、连接,然后使用 debug 中的 u 命令反汇编,查看指令占用了17h内存,如下图所示:

由此可知,循环了17次,因此 第8 行的空格填 17h,并将 cx 的值设置为 17h,重新编译、连接和反汇编,如图

-g命令调试运行,-d查看

由机器码可知已把mov ax, 4c00h 之前的指令复制到指定内存。

小结

程序中所有数据不能以字母开头,如果是字母开头的 16 进制数,需要在前面补 0。

makrkdown真好用,写博客必备

多实验,学会查资料是好习惯



来自为知笔记(Wiz)


posted on 2018-11-22 21:41  sakura0—-0  阅读(97)  评论(1编辑  收藏  举报