汇编语言实验9

四、实验内容

  1. 补全程序 t1.asm,完成在屏幕上输出内存单元中的十进制两位数

源代码及其注释:

编译连接运行测试结果:

2. 补全程序 t2.asm,完成在屏幕上输出 data 段定义的 5 个十进制两位数,数据和数据

之间以空格间隔。

源码及其注释如下:

编译连接运行后的结果:、

  1. 教材实验 9(P187)

编程:在屏幕中间分别显示绿色,绿底红色、白底蓝色的字符串’Welcome to masm!’.

源码及其相关注释如下:

运行结果测试;

五、实验总结

此次实验考察了对十进制数的打印以及字符串的彩色显示,在十进制数打印时用到了div除法,思想为将商余数分别放入寄存器的高位低位字节,然后用int 21h的2号子功能打印出这些字符;在字符的彩色显示中需要对字符的位置进行计算。在11、12、13行显示三行字符串。而每行80个字符160字节,字符串所占用字节数16*2。所以中间位置的在其行的偏移地址为:(160-16*2)/2=64=40h,11行起始地址为11*160=1760=06e0h,加上移到中间去则显示起始地址为06e0+0040h=0720h。这便是代码中地址的来源。

原文地址:https://www.cnblogs.com/jdl-TECshadower/p/10084147.html

时间: 2024-10-14 16:08:10

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

汇编语言实验二

一.使用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

实验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(查看i

王爽<汇编语言>实验十

实验十 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