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

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

 

四、实验结论

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

(1)编写汇编源程序loop1.asm

assume cs:codecode 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 21hcode endsend

 

(2)对源程序 t1.asm 进行汇编、连接、运行;

step1:编译;

step2:连接;

step3:运行;

运行程序之后会在屏幕上出现16个红色爱心,这个就是在显存中存储数据,我们所存入的0403h就代表着一个红色爱心的字符。


如果将0403h变为0441h,重新编译、连接和运行之后得到如下结果:

由此可以猜测,04应该是控制红色的数据,后面两个03控制的是爱心字符,41控制的是字符A;


 

注:我利用了debug进行调试,运行之后查看了b800:07b8开始的连续内存如图:

但是发现内存中的数据并没有改变为0403h,而且此段内存为显存;


 

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

(1)编写汇编源程序loop2.asm;

assume cs:code

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

(2)对源程序 t1.asm 进行汇编、连接、运行;

step1:编译;

step2:连接;

step3:运行;

运行之后屏幕上没有任何显示;


以下操作是进入debug环境进行调试的:

(1)在debug中运行loop2.exe文件并查看当前各个寄存器中的值;

(2)我们通过u命令进行反汇编;

(3)用g命令执行到mov ax,4c00h之前;

(4)用t命令单部执行;

(5)下一步即将执行int 21h,接下来用p命令执行;

注:如果用g命令执行到int 21h之前,则会发生如下情况:

即cx的值没有发生任何改变;


 

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

assume cs:codecode segment    mov ax,076ah    mov ds,ax    mov ax,0020h    mov es,ax    mov bx,0    mov cx,14      s:mov al,[bx]    mov es:[bx],al    inc bx    loop s    mov ax,4c00h    int 21hcode endsend

 

根据任务二,进行反汇编可以得知"mov ax,4c00h"之前的机器码的存储位置是076a:0~076a:0014,现在需要将之前的指令复制到内存0:200处,只需要将076a:0~076a:0014这段内存中的机器码复制到一0:200开始的内存空间即可。

(1)当前偏移地址为076a,所以将数据传入段寄存器CS中;

(2)由于此段内存空间有14个字节单元,所以执行14次循环;

一、对源程序 t1.asm 进行汇编、连接、运行;

注:Required parameter missing 的原因是什么?

二、进入debug进行调试

step1:在执行任务二之后查看当前代码的机器码所存储的位置;

step2:运行copy.exe文件并查看当前各个寄存器的值;

step3:进行反汇编;

step4:利用g命令执行;

step5:利用t命令和p命令执行;

step6:查看0:200之后的字节;

可以看出我们已经将数据存入了0:200开始的内存;

 

转载于:https://www.cnblogs.com/Sun-Yiwen-blog/p/9981165.html

你可能感兴趣的文章
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
GDB调试
查看>>
centos系统python2.7更新到3.5
查看>>
【Quartz】常用方法的使用方式(三)
查看>>
MVVM模式下关闭窗口的实现
查看>>
C#区域截图——调用API截图
查看>>
c#与java中byte字节的区别及转换方法
查看>>
A WebBrowser Toy
查看>>
用MyXls生成Excel报表(C#)
查看>>
了解WP的传感器
查看>>
阅读笔记 火球——UML大战需求分析 2
查看>>
acedEvaluateLisp函数的反汇编
查看>>
Linux无线工具详解(Wireless tools for Linux)
查看>>
ACM PKU 2328 http://acm.pku.cn/JudgeOnline/problem?id=2328
查看>>
VB.NET 制作DLL动态库文件
查看>>
RSS阅读器
查看>>
Java语言基础——数据类型
查看>>
微信电脑版不断崩溃
查看>>
js链式调用
查看>>