实验9 根据材料编程
Posted sun-yiwen-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验9 根据材料编程相关的知识,希望对你有一定的参考价值。
四、实验结论:
任务一:完成在屏幕上输出内存单元中的十进制两位数
Code:
assume cs:code, ds:data data segment db 12 db 0,0 data ends code segment start: mov ax,data mov ds,ax mov ah,0 mov al,ds:[0] mov bl,10 div bl mov ds:[1],al mov ds:[2],ah mov ah,2 mov dl,ds:[1] add dl,‘0‘ int 21h mov ah,2 mov dl,ds:[2] add dl,‘0‘ int 21h mov ax,4c00h int 21h code ends end start
最后运行得到如下结果:
任务二:完成在屏幕上输出 data 段定义的 5 个十进制两位数,数据和数据 之间以空格间隔。
Code:
assume cs:code, ds:data data segment db 12,35,96,55,67 data ends code segment start: mov ax,data mov ds,ax mov si,0 mov cx,5 s:mov ax,0 mov al,[si] mov bl,10 div bl mov bx,ax mov dl,‘0‘ add dl,bl mov ah,2 int 21h mov dl,‘0‘ add dl,bh mov ah,2 int 21h mov ah,2 mov dl,32 int 21h inc si loop s mov ax,4c00h int 21h code ends end start
运行结果:
Tips:软中断指令是mov ah,2不是mov al,2,由于这个问题,之前代码运行的时候一直会自动跳出
任务三:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串‘welcome to masm!‘。
Step1:计算出每一个条语句的起始偏移地址,已知我们使用的是80x25的彩色字符模式,我们需要显示三行,所以选择11、12和13行来输出字符。需要输出的字符需要占用16x2个的内存单元,一行有80x2=160个内存单元,因为要输出在屏幕中间,所以11行的起始偏移地址为1823,但是我们需要将字符的ascii码存储在偏移地址为偶数的空间里,所以可以选择偏移地址为1822或者1824,我所选择的是1824。
Tips:我在做实验的过程中,由于只计算了中间位置没有考虑偶数偏移地址存储字符的ascii码导致了如下图案:(即使错误了,但是这个图案非常的可爱呀!)
Step2:在把三条语句输出之前,我先尝试了只输出一条的情况:
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 mov ax,0b800H mov es,ax mov cx,16 mov bx,0 mov di,16 mov si,1824 s:mov al,[bx] mov ah,[di] mov es:[si],ax add si,2 inc bx loop s mov ax,4c00h int 21h code ends end start
运行结果:
Step3:将三条语句同时输出,在输出一条语句的基础上还要完成显存偏移地址的变化和语句样式的改变,还需要处理用于控制循环次数CX寄存器中的值;
Code:
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 mov ax,0b800H mov es,ax mov cx,3 mov si,1824 mov di,16 s0:mov dx,cx mov bx,0 mov cx,16 s:mov al,[bx] mov ah,[di] mov es:[si],ax add si,2 inc bx loop s add si,128 inc di mov cx,dx loop s0 mov ax,4c00h int 21h code ends end start
运行结果:
五、总结与体会
1、在实现多重循环的时候要及时保存CX的值
2、注意在显存中保存数据的时候应该把字符的ASCII码放在偏移地址为偶数的内存单元中
3、在调试的过程中,对汇编代码的整体认识更加清晰
以上是关于实验9 根据材料编程的主要内容,如果未能解决你的问题,请参考以下文章