汇编语言 实验3

实验3

实验内容1:运行exe文件输出数据,并观察每一步的调试情况

步骤1:在记事本中编写t1.asm文件

步骤2:在dosbox环境下汇编、连接、运行文件,得到数据36

步骤3:修改dl寄存器中的值为0-9中任意一个数,重新编译链接运行,查看结果

步骤4:进入debug环境进行调试——

-r查看各寄存器的值;

-d查看PSP程序段前缀中前两个字节的值;(CS和DS寄存器相差10h:存放程序段前缀的内容,使程序返回时能记住返回的地址)

-u进行反汇编

步骤5:用-t(查看普通步骤)、-p(查看int 21h步骤)逐步调试,观察结果

tips:

1.在win7系统下可以用notepad打开一个文本文档,而win10Dosbox环境下不行;

2.用‘x’在寄存器中输入相应数据也可以输出同样结果)

个人理解:把0200h放入ax寄存器中,在dx中存入003xh(x为任意0-f的16进制数字),后面再加入int 21h的语句,运行后就会显示1Byte的x数据(其中a-f只会输出1)

实验内容2:运行exe程序在屏幕左上角输出带颜色的数字,逐步调试并观察其过程

步骤1:在记事本中编写t2.asm文件

步骤2:在dosbox环境下汇编、连接、运行文件,清屏后运行屏幕左上角显示红色的36

步骤3:修改原t2.asm中像内存单元传送的数据,运行后发现在屏幕上出现不同颜色的不同数字

tips:运用mov [偏移地址],数据 时,有的平台会显示向寄存器中存入了占多少存储单元的数据,有的不会)

个人理解:实验1中,我发现向从0b800开始的内存单元中写入数据,能在屏幕的不同位置输出不同颜色的各种符号。而通过本次实验,我还发现向0b800内存中写入数据两个字节数据xy3z,则会在屏幕左上角顶格出现数字z,而xy控制了输出数据z的颜色

实验3——总结

收获:通过本次实验,我初步了解了一个完整的汇编小程序的形成过程(汇编、连接、运行),并且通过debug环境逐步观察了各个寄存器的变化。学到了汇编程序中CS寄存器的值总是比DS多10h,原因是需要10h的空间存放PSP(程序段前缀)以标识代码运行完毕之后程序返回的位置。明白了-p命令是用来查看 int 21h 这条指令的执行过程的。还学到了可以用mov [寄存器],数据 这种方式来将数据存入以寄存器的内容为偏移地址的内存单元中。

问题:怎么用汇编语言编写一个从键盘输入字符,从屏幕输出字符的程序呢?

原文地址:https://www.cnblogs.com/cjh-1023/p/9979162.html

时间: 2024-08-09 00:54:36

汇编语言 实验3的相关文章

汇编语言实验二

一.使用Debug,将下面的程序段写入内存,逐条执行. 用a命令将指令段写入内存 用r命令改写CS:IP使其指向2000::0内存单元 用t命令执行指令 结果如图 二.观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变 根据图,用命令a将指令输入内存单元 可能与栈的知识有关,大致为什么还是不了解,希望能得到解决. 实验总结与体会: 通过实验初步了解了栈的一些存储方式,和其存储形式.同时也逐渐熟悉了汇编语言的编写环境. 学习到了汇编语言如何设置第三方变量. 原

汇编语言实验 3 编程、编译、连接、跟踪

实验内容 (1)第1步,编写汇编源程序t1.asm, 源程序代码如下: assume cs:code code segment mov ah,2 mov dl,3 add dl,30h int 21h mov ah,2 mov dl,6 add dl,30h int 21h   mov ah,4ch int 21h code ends end 因为对汇编语言的一系列还不熟练,所以花了点时间,终于进去了. 对源程序 t1.asm 进行汇编.连接.运行.调试 (1) 运行程序,观察程序输出结果是什么

王爽<汇编语言>实验十

实验十 3.数值显示(以下程序附带测试程序) 1 ;名称: dtoc 2 ;功能: 将dword型数据转变为表示十进制数的字符串,字符串以0为结尾 3 ;参数: (ax)=dword型数据低字 4 ; (dx)=dword型数据高字 5 ; ds:si指向字符串的首地址 6 ;返回: 无 7 assume cs:code 8 data segment 9 haha dd 4294967295 10 tata dd 16 dup(?) 11 data ends 12 code segment 13

汇编语言实验1

实验任务: 1. 使用Debug,将下面的程序写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化. 用E命令: 用A命令: 2. 将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方. 注:2的八次方为256,十六进制下是200 3. 查看内存中的内容:在FFF00H~FFFFFH的某几个单元中写有一个生产日期,找到这个生产日期并试图改变它. (注:此实验是在机房完成的,与前图略有不同) 4. 向内存从B8100H开始的单元中填写数据 (好好玩啊) 实

汇编语言 实验二

实验: 1)使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际情况来填空. ① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H  ② 将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021 mov  ax,0021 mov  ds,ax mov  ax,2200 mov  ss,ax mov 

汇编语言 实验2

实验2 1.          debug的使用之 段寄存器的使用 -d 段寄存器:偏移地址 (偏移地址2) 查看从[段寄存器:偏移地址]开始到偏移地址2(默认128字节)的内存中的内容 示例: -e 段寄存器:偏移地址 修改值 修改从[段寄存器:偏移地址]开始的内存中的内容 示例: -u 段寄存器:偏移地址 显示从[段寄存器:偏移地址]开始的汇编指令 示例: -a 段寄存器:偏移地址 从[段寄存器:偏移地址]开始写入指令 示例: 2.          实验任务 (1)     将程序段写入内

汇编语言 实验三

练习1: 编写代码: 使用masm实验: 得到输出结果为36 (2)将line4的dl变为2,line9的dl变为5,观察结果: 得到结果为25. (3)在用debug对生成的可执行文件 t1.exe 进行调试. 用r命令 得到cs=076A,ds=075A,满足公式(cs)=(ds)+10H. PSP(程序段前缀)的头两个字节是CD 20, 用debug查看PSP的内容,验证是否如此. 的确如此. 使用 u 命令对 t1.exe 进行反汇编,观察反汇编得到的源代码. 使用 t 命令和 p 命令

汇编语言实验4

任务一: 综合使用loop和[bx],编写完整汇编源程序,实现向内存b800:07b8开始的连续16个字单元重复填充字数据0430h. 代码: 运行结果: 任务二: 代码: 运行结果: 无明显结果,用debug查看 发现内存已经被修改了 任务三: 代码: 运行结果及debug后的结果: 修改代码: 再次运行及debug: 总结与体会: 经过此次实验体会到了如何使用loop指令以及[bx]还有段前缀: cx有控制循环次数的作用 原文地址:https://www.cnblogs.com/toubun

汇编语言实验五

实验任务一 1.利用debug加载.跟踪程序 (1)先利用r命令来查看各个寄存器的值 (2)从cx中可知道程序的长度,用cx中的值减去20h(数据段和栈段已分配的空间)得到代码段的长度,用u命令精确反汇编 (3)先执行到000D之前,看看ds是否已成功指向数据段 (4)从上图可以看到ds已指向数据段,然后我们接着执行到程序返回前,即到001D之前,再查看一次数据段的内容 (5)从上图可以看到,数据段没有发生变化 2.书上的问题解答: (1)程序返回前,data段中的数据为 23 01 56 04