博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验 4 [bx]和loop的使用
阅读量:6873 次
发布时间:2019-06-26

本文共 1527 字,大约阅读时间需要 5 分钟。

一、实验结论

1.实验内容1

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

(1)代码如下:

assume cs:code
code segment
     mov ax,0b800h
     mov ds,ax
     mov ax,0403h
     mov bx,07b8h
     mov cx,16
s:mov [bx],ax
  inc bx
  inc bx
  loop s
  mov ax,4c00h
  int 21h
 
code ends
end
(2)用masm进行运行,运行结果如下

(3)将源代码程序中字数据0403H→修改为0441H,再次运行

 

 

2.实验内容2

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

(1)

代码如下:综合使用loop, [bx], mov实现

assume cs:code

code segment
     mov ax,0020h
     mov ds,ax
     mov bx,0h
     mov cx,40h
     mov ax,0
s:
  mov [bx],ax
  add ax,1h
  inc bx
  loop s
  mov ax,4c00h
  int 21h
 
code ends
end

 利用masm集成操作软件进行编译

用debug查看储存单元,观察是否成功写入

运行时没有出现结果,用debug查看内存单元发现,正常写入内存数据,代码运行成功

(2)利用栈的特性,综合使用 loop,push 实现

代码如下:

assume cs:code

code segment
     mov ax,0020h
     mov ss,ax
     mov sp,40h
     mov bh,3fh
     mov bl,3eh
     mov cx,20h
s:push bx
  add bh,-2
  add bl,-2
    loop s
  mov ax,4c00H
  int 21H
code ends
end

改动过程中出现的问题:

①由于8086cpu的栈读入按字(两个字节输入)所以入栈操作需要进入一个字的数据,然后把其中的两个字节数据分别减少2

②小端法的输入,push bx时(bx=bh+bl),将bh放到栈最底部,bl在bh的内存单元上面(例如bh的地址为10002H,bl的地址为10001H)

所以要注意bh,bl的初始数值

③由于按字读入的原则,cx=40h/2=20h。

对比两种方法,循环语句显然更容易让人理解,而用栈语句进行操作,操作效率更高,能一次输入两个字节。

 3.实验内容3

源代码

assume cs:code

         code segment

         mov ax,cs  因为cs为储存指令的段地址

         mov ds,ax

         mov ax,0020H

         mov es,ax

         mov bx,0

         mov cx,0017H  此处为代码的长度,用debug观察寄存器内容获得(cx=001c,减去后面的5个不计入其中的字节)

         s:mov al,[bx]

           mov es:[bx],al

           inc bx

           loop s

           mov ax,4c00H

           int 21H

code ends

end

用debug进行调试

用u命令反汇编

可以看到,相应的代码内容已经复制到了0:200处,成功

 二、总结与体会:

①熟悉了loop和【bx】的应用,了解了循环语句的应用方法

②了解了栈入栈时的每个字节输入的先后顺序,对小端法的印象更深刻了

③熟悉了如何进行代码段的复制,cs和寄存器:【bx】的应用

 

转载于:https://www.cnblogs.com/xihongqing/p/9971738.html

你可能感兴趣的文章
开启智慧新生活 新余市智慧城市建设全省率先
查看>>
智慧东湖让城市慢游更幸福
查看>>
陕西联通推进高速公路WiFi覆盖
查看>>
Linux之iconv转换文本格式的问题
查看>>
linux 用户权限和组权限
查看>>
RPM的使用
查看>>
我的友情链接
查看>>
lvs
查看>>
原型图设计软件
查看>>
setTimeout和setIntelval的区别
查看>>
[C#]通过方法获得游戏人数和玩家姓名
查看>>
How to rotate a bitmap
查看>>
spring常见注解
查看>>
我的友情链接
查看>>
Linux 磁盘分区
查看>>
基于虚拟用户的邮件服务器在企业网中的应用
查看>>
android开发中shape的绘制
查看>>
在XP系统下安装ubuntu12.04
查看>>
数据库同步过程中一致性和完整性的保证
查看>>
VC++中图像处理类CBitmap的用法
查看>>