关键词:
名称 实验 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,用来修改输入的字符和其属性。(偶地址存放字符,奇地址存放字符的颜色属性)
实验报告九
...的5个十进制两位数,数据和数据之间以空格间隔。教材实验九div的使用中,如果除数为8位,被除数则为16位;如果除数为16位,被除数则为32位;如果数据不满足扎用条件,被除数的高一般大于或者等于出书,就会产生除法溢出... 查看详情
二〇一九年第三次课程设计实验报告
二〇一九年第三次课程设计实验报告一,实验项目名称疯狂的跳弹暨多球反弹(第四章第二个)二,实验项目功能描述本项目为多球反弹而项目的主体功能是:用easyx加载c语言的源代码以实现更加复杂和丰富的项目表现程度。本... 查看详情
实验九根据材料编程
南京信息工程大学实验报告实验(实习)名称 根据材料编程 实验(实习)日期 2018年12月11日 得分 指导老师 耿学华 系计软院专业计科年级2017级班次5姓名沈筱月学号20171308198... 查看详情
实验报告4(代码片段)
C程序设计实验报告姓名:郑文亮实验地点:家里实验时间:2020年4月12日实验项目:5.3.1练习2求数列的前n项和5.3.2练习2求水仙花数5.3.4十进制转换5.3.5练习1百马百担问题5.3.5练习2求等差数列5.3.5练习3食品分配问题九九乘法表的实... 查看详情
实验报告四(代码片段)
C程序设计实验报告实验项目:5.3.1-2、5.3.2-2、5.3.4、5.3.5-1、5.3.5-2、5.3.5-3、九九乘法表、奥数趣解姓名:钟宗浩 实验地点:家里 实验时间:2020年4月9日一、实验目的与要求1、熟练地掌握while,do_while及for语句实现循环... 查看详情
实验九
第一题补充完成的代码运行结果实验结果第二题补全代码运行结果 查看详情
实验八实验九
实验八:源代码:package计算圆锥体面积;classabcextendsyuanzhuitiimplementsArea,VolumefinaldoublePI=3.14;publicdoublevolume(doubler,doubleh)doublev;v=r*h/3;returnv;publicdoublearea(doubler,doublel)doublea;a=PI*r*l 查看详情
实验九
1.补全程序输出结果2.补全程序 输出结果3.输出结果 总结与体会: 这次实验主要就是循环和之前学过的指令的综合运用,有收获。 查看详情
汇编实验九
实验内容一补全代码后如下经运行为实验任务二代码如图所示一开始似乎因为缺少对字符长度的限制导致实验结果为实验任务三代码如下实验结果如图说实话这个弄了好几次都是显示不完全是真的难受。。。弄了半天终于弄好了... 查看详情
第四次实验报告(代码片段)
C程序设计实验报告 姓 名:张美盛 实验地点:家 实验时间:2020年4月9日 实验项目:5.3.1练习2求数列的前n项和 5.3.2练习2... 查看详情
实验九
1.补全程序t1.asm,完成在屏幕上输出内存单元中的十进制两位数2.补全程序t2.asm,完成在屏幕上输出data段定义的5个十进制两位数,数据和数据之间以空格间隔。3.教材实验9(P187) 查看详情
实验九
publicclasserror publicstaticvoidmain(String[]args) pointpoint1=newpoint(1,2); pointpoint2=newpoint(1,2); pointpoint3=newpoint(1,2); rectanglerectang 查看详情
实验九
packageyichang; publicclassYichangpublicstaticvoidmain(String[]args)pointp1=newpoint(1,3);pointp2=newpoint(1,2);pointp3=newpoint(1,1);newrectangle(p1,-2,6);newtriangle(p1,p2,p3);point[]point=p 查看详情
实验九
一、实验目的1.掌握十进制两位数输出的方法2.理解80×25彩色字符模式显示原理3.综合应用寻址方式和汇编指令完成应用编程二、实验准备1.复习数值和数字字符之间的转换方法,div指令用法2.学习P187-189支撑材料及「实验9提示」... 查看详情
实验九
一、实验目的1.掌握十进制两位数输出的方法2.理解80×25彩色字符模式显示原理3.综合应用寻址方式和汇编指令完成应用编程二、实验准备1.复习数值和数字字符之间的转换方法,div指令用法2.学习P187-189支撑材料及「实验9提示」... 查看详情
汇编实验九
实验内容1.assumecs:code,ds:datadatasegmentdb12db0,0 dataendscodesegmentstart:movax,datamovds,ax movah,0moval,ds:[0] movbl,10divblmovds:[1],al movds:[2],ah movah,2movdl,ds:[1]  查看详情
实验九
练习一:assumecs:code,ds:datadatasegmentdb12db0,0; dataendscodesegmentstart:movax,data; movds,axmovah,0moval,ds:[0]; movbl,10divblmovds:[1],al;movds:[2],ah; movah,2movdl,ds:[1]; a 查看详情
实验九
1assumecs:code,ds:datadatasegment db12 db0,0dataendscodesegmentstart: movax,data movds,ax & 查看详情