ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:52.73KB ,
资源ID:6861870      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6861870.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编实验9.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编实验9.docx

1、汇编实验9山东大学实验报告 2016 年 月 日姓名 刘方铮 ,学号 201411130001 系年级 计算机科学与技术系2014级 科目 汇编语言 题目 字符图形程序,屏幕窗口程序和画栅栏程序 实验源程序清单字符图形程序:data segment array1 db 0,1,2,3,4,5,6,7,8,9 row db 0 col db 0 color db 0fh array2 db please pay attention:press ESC to exit & press del to clear screen,$ array3 db CHARACTER:,$ array4 db CO

2、LOR:,$data endsprognam segment assume cs:prognam,ds:datamain proc farstart: push ds mov ax,0 push ax mov ax,data mov ds,ax lea dx,array2 mov ah,9 int 21h mov row,1 mov col,24 mov bx,26l0: call reset mov al,7ch mov bh,0 mov cx,1 mov ah,0ah int 10h inc row dec bx jnz l0 mov row,2 mov col,0 mov di,0 ca

3、ll reset lea dx,array3 mov ah,9 int 21h mov row,3 mov col,0 l1: call reset mov ax,di add al,30h mov bh,0 mov cx,1 mov ah,0ah int 10h inc col call reset mov bh,0 mov cx,1 mov ah,0ah mov al,array1di int 10h inc di cmp di,9 ja l2 add col,6 cmp col,22 jb l1 add row,2 mov col,0 JMP l1l2 : add row,4 mov c

4、ol,0 call reset lea dx,array4 mov ah,9 int 21h inc row mov col,0 mov di,1l3: call reset mov bx,di add bl,60h mov bh,0 mov cx,1 mov ah,0ah mov al,bl int 10h inc col call reset sub bl,60h mov bh,0 mov cx,1 mov ah,9 mov al,0dbh int 10h inc di cmp di,9 ja l4 add col,6 cmp col,22 jb l3 add row,2 mov col,

5、0 JMP l3 l4: mov row,1 mov col,26 call resetdraw: mov ah,0 int 16h cmp ah,48h je up cmp ah,50h je down cmp ah,4dh je right cmp ah,4bh je left cmp ah,53h je l5 cmp ah,01h jnz num retl5: call clear mov row,1 mov col,26 call reset jmp drawnum: cmp al,30h jnb l6 jmp drawl6: cmp al,39h ja l7 and ax,00ffh

6、 sub ax,30h mov di,ax mov al,array1di mov bh,0 mov cx,1 mov bl,color mov ah,09h int 10h jmp drawl7: cmp al,61h jb l8 cmp al,69h ja l8 sub al,60h mov color,all8: jmp drawup: dec row jz up1 jmp l9 up1: inc row jmp l9down: inc row cmp row,25 ja down1 jmp l9down1: dec row jmp l9left: dec col cmp col,26

7、jb left1 jmp l9left1: inc col jmp l9right: inc col cmp col,78 ja right1 jmp l9right1: dec coll9: call reset jmp draw main endp reset proc near mov ah,2 mov bh,0 mov dh,row mov dl,col int 10h retreset endpclear proc near push ax push bx push cx push dx mov ah,6 mov al,0 mov ch,1 mov cl,26 mov dh,25 m

8、ov dl,79 mov bh,7 int 10h pop dx pop cx pop bx pop ax retclear endpprognam endsend start运行结果:屏幕窗口程序:;*datas segment cury db 15 ;光标初始位置 curx db 50 lx db 10 ;记录左窗口当前光标位置,初始化为左窗口初始位置 ly db 15 rx db 50 ;记录右窗口当前光标位置,初始化为右窗口初始位置 ry db 15 dwx db 15 ;记录下窗口当前光标位置,初始化为下窗口初始位置 dwy db 22 ulrow db 0 ulcol db 0 l

9、rrow db 0 lrcol db 0 windownum db 1datas ends;-宏指令clear 清屏clear macro a,b,c,d mov al,0 ;初始化窗口 mov bh,7 ;卷入行属性 mov ch,a ;左上角行号 mov cl,b ;左上角列号 mov dh,c ;右下角行号 mov dl,d ;右下角列号 mov ah,6 int 10h ;BIOS调用,屏幕初始化endm;-宏指令 scroll向上卷动一行scroll macro cont,ulrow,ulcol,lrrow,lrcol mov al,cont ;上卷行数 mov bh,70h ;卷入

10、行属性 mov ch,ulrow ;左上角行号 mov cl,ulcol ;左上角列号 mov dh,lrrow ;右下角行号 mov dl,lrcol ;右下角列号 mov ah,6 int 10h ;BIOS调用,上卷endm;-宏指令 postc 光标定位postc macro y,x mov bh,0 ;页号 mov dh,y ;行 mov dl,x ;列 mov ah,2 int 10h ;BIOS调用,置光标位置endm;-在当前窗口和下窗口显示display macro mov bh,0 mov cx,1 mov ah,0ah ;在当前的窗口打印字符 int 10h postc

11、dwy,dwx mov bh,0 mov cx,1 mov ah,0ah ;在下窗口输出 int 10hendm;-接收字符并判断getchar macro input: ;输入键盘上的字符 mov ah,0 int 16h ;BIOS调用,从键盘读字符 cmp ah,4bh ;判断输入字符是否为左向键 jnz no_left postc ly,lx mov windownum,2 jmp input no_left: cmp ah,4dh jnz no_right ;判断输入字符是否为右向键 postc ry,rx mov windownum,1 jmp inputno_right: cmp

12、 ah,01 ;判断输入字符是否为ESC jz exit display ;嵌套调用 inc dwx cmp dwx,65 ;判断下窗口是否上卷 jle isright scroll 1,19,15,22,65 mov dwx,15isright: cmp windownum,1 ;判断是否在右窗口 jnz displeft dispright: ;判断右窗口是否上卷 inc rx cmp rx,70 jle rightexit scroll 1,6,50,15,70 mov rx,50 rightexit: ;右窗口输出 postc ry,rx jmp inputdispleft: ;判断左

13、窗口是否上卷 inc lx cmp lx,30 jle leftexit scroll 1,6,10,15,30 mov lx,10 leftexit: ;左窗口输出 postc ly,lx jmp inputexit:endm;-codes segment assume cs:codes,ds:datasstart:main proc far push ds sub ax,ax push ax mov ax,datas mov ds,ax clear 0,0,24,79 scroll 10,5,10,15,30 scroll 10,5,50,15,70 scroll 4,18,15,22,6

14、5 postc cury,curx getchar ret main endp;-codes ends;*end start运行结果:画栅栏程序:esc_key equ 1bhstack_seg segment stackdb 32 dup(?)stack_seg endsDATA_SEG SEGMENTmsg0 db After drawing the lines,press ESC to exit or other keys to continue, 0ah,0dh,$msg1 db Enter starting point x :, 0ah,0dh,$msg2 db Enter star

15、ting point y :, 0ah,0dh,$msg3 db Enter ending point x :, 0ah,0dh,$msg4 db Enter ending point y :, 0ah,0dh,$msg5 db Enter column distance :, 0ah,0dh,$msg6 db Enter row distance :, 0ah,0dh,$buff db 4,?, 4 dup(?)start_x dw ?start_y dw ?end_x dw ?end_y dw ?col dw ?row dw ?DATA_SEG ENDSdisplay macro msg

16、mov ah,09h mov dx,offset msg int 21h endmget_arg macro arg mov ah,0ah mov dx,offset buff int 21h dec2bin mov arg,ax endmdraw_line macro sx,sy,ex,ey,col,row mov dx,start_x_dl0: mov cx,start_y mov al,3 mov ah,0ch_dl1: int 10h inc cx cmp cx,end_y jbe _dl1 add dx,row cmp dx,end_x jbe _dl0 mov cx,start_y

17、_dl2: mov dx,start_x mov al,3 mov ah,0ch_dl3: int 10h inc dx cmp dx,end_x jbe _dl3 add cx,col cmp cx,end_y jbe _dl2 endmset_mode_color_text macro mov ah,0 mov al,3 int 10h endmset_mode_color_graphics macro mov ah,0 mov al,4 int 10h endmget_key macro mov ah,0h int 16h endmcrlf macro mov ah,02h mov dl

18、,0ah int 21h mov dl,0dh int 21h endmdec2bin macro local _d2b mov cl,buff1 mov ch,0 mov si,offset buff+2 mov ax,0 mov dh,10d mov bh,0 _d2b: mov bl,si and bl,0fh mul dh add ax,bx inc si loop _d2b endmCODE_SEG SEGMENT ASSUME CS:CODE_SEG,DS:DATA_SEGmain proc far push ds xor ax,ax push ax mov ax,data_seg

19、 mov ds,axagain: set_mode_color_text display msg0 display msg1 get_arg start_x crlf display msg2 get_arg start_y crlf display msg3 get_arg end_x crlf display msg4 get_arg end_y crlf display msg5 get_arg col crlf display msg6 get_arg row set_mode_color_graphics draw_line start_x,start_y,end_x,end_y,c

20、ol,row get_key cmp al,esc_key je exit jmp againexit: ret main endpCODE_SEG ENDS END main运行结果: 问题及收获本次实验在设计中也遇到了一些问题,像在进行界面设计的时候,设计区域边界和区域内布局比较难确定,设计不好就影响界面的美观;编码过程中光标位置的重置容易忘记,是在调试过程中才发现出来的;编码过长,内存占用比较多。掌握了屏幕窗口程序的基本设计方法,领略了宏的设计和使用方法,实验的整体思路比较简单,但如若想编出复杂的屏幕程序,需要对BIOS调用有一个大致的了解,只有这样才能灵活的去运用,这也就启迪我多去阅读和积累相关的知识,只有知识积累到一定程度才能编出好的程序。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1