码迷,mamicode.com
首页 > 其他好文 > 详细

实验九报告

时间:2018-12-11 21:50:56      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:ima   data   bsp   属性   添加   修改   一个   实验目的   屏幕   

名称 实验 9 根据材料编程

学院 计软院 专业 年级 2017 级 班次 4  姓名 任心怡  学号 20171308152 

一、实验目的

1. 掌握十进制两位数输出的方法

2. 理解 80×25 彩色字符模式显示原理

3. 综合应用寻址方式和汇编指令完成应用编程

二、实验准备

1. 复习数值和数字字符之间的转换方法,div 指令用法

2. 学习 P187-189 支撑材料及「实验 9 提示」(本文档最后一部分)

3. 复习灵活的寻址方式及本次实验中用到的指令,如 mov, loop,div 等。

三、实验内容

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

; 在屏幕上输出内存单元中的十进制两位数
assume cs:code, ds:data
data segment
db 12
db ?,? ; 前一个字节用于保存商,后一个字节用于保存余数
data ends
code segment
start:
××××
×××× ; 补全指令,使得ds <-- data段地址

mov ah,0
mov al,ds:[0] ; ax <-- data段字节单元的被除数12
mov bl,10
div bl
mov ××,al ; 补全代码,让商保存到data段注释中指定的单元
mov ××,ah ; 补全代码,让余数保存到data段注释中指定的单元

mov ah,2
mov dl,×× ; 补全代码,使得dl <-- data段中保存的商的字节单元数值
×××× ; 补全代码,使得dl中的数值转换为数字字符
int 21h

mov ah,2
mov dl,×× ; 补全代码,使得dl <-- data段中保存余数的字节单元数值
×××× ; 补全代码,使得dl中的数值转换为数字字符
int 21h

mov ax,4c00h
int 21h
code ends
end start

技术分享图片

得到结果:

技术分享图片

 

刚在补全代码的时候,将db 0, 0写成了db 0,0 结果出来的是57,后来修改后得到了12。

 

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

assume cs:code, ds:data
data segment
db 12,35,96,55,67
data ends
code segment
start:
; 补全程序,参考t1.asm,综合应用以下知识完成:
; (1) loop指令、内存单元地址的灵活表示
; (2) div指令, 数字→数字字符的转换
; (3) int 21h的2号子功能,完成单个字符输出的方法,即:
; mov ah,2
; mov dl,待输出字符或其ASCⅡ码
; int 21h
; (4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符

mov ax,4c00h
int 21h
code ends
end start

技术分享图片

得到结果为:

技术分享图片

 

这次的代码需要借助si寄存器来实现把被除数依次放入到ds中去。

 

3. 教材实验 9(P187)

; p187 实验9

assume ds:data, cs:code
data segment
db ‘welcome to masm!‘
db 2H,24H,71H ;字符串属性值
data ends

code segment
start: mov ax,data
mov ds,ax ;字符串及属性值所在段的段地址送入ds

mov ax,0b800H
mov es,ax ;80×25彩色字符模式显示缓冲区段地址送入es

; 添加代码,通过循环逐个将每个字符及其属性送入相应的显示缓冲区对应行
; 即:将data段的字符及属性通过循环逐个mov到显示缓冲区(es)段相应的单元内

; 可以先尝试分别写三段代码,每次完成一行的显示
; 程序运行起来后,再尝试通过灵活的寻址方式和循环,对三段代码修改和简化
; 学习第10章子程序后,还可以进一步完善优化,设计子程序,将行号、列号、颜色属性设置成入口参数

mov ax,4c00h
int 21h
code ends
end star

技术分享图片

技术分享图片

运行结果:

技术分享图片

 

通过loop执行,进行每一行字符的显示。用di,si寄存器来实现逐个输入,但是每次循环完后要将si,di的重置到0,将cx的值重置到10h,保证下面一次循环的实现。

通过观看微视频,可以了解到字符颜色和在80*25的彩色字符模式显示缓冲区的位置。将其写入到es显存段中的偏移地址。

技术分享图片

四、总结与体会

 在初写t1和t2代码时候,有些不知所措,不知道如何保存商和余数。然后通过微视频和之前已经提交同学的代码后,知道了编写代码的具体步骤顺序。查看书中发现,AL存储除法操作的商,AH存储余数。

其实有些地方并没有很了解,比如我并不知道为何t1要add ah,2这个操作。但是到实验三中自己编写代码块时,没有用到这条代码也没什么影响。

实验三中间需要借助两个新的寄存器si,di,用来修改输入的字符和其属性。(偶地址存放字符,奇地址存放字符的颜色属性)

 

实验九报告

标签:ima   data   bsp   属性   添加   修改   一个   实验目的   屏幕   

原文地址:https://www.cnblogs.com/DDDDDdian/p/10105105.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!