标签: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