汇编语言实验九
-
实验任务一
1. 填写的代码:
assume cs:code, ds:data data segment db 12 db 0,0 ; 前一个字节用于保存商,后一个字节用于保存余数 data ends code segment start: mov bx,data mov ds,bx ; 补全指令,使得ds <-- data段地址 mov ah,0 mov al,ds:[0] ; ax <-- data段字节单元的被除数12 mov bl,10 div bl mov ds:[16],al ; 补全代码,让商保存到data段注释中指定的单元 mov ds:[17],ah ; 补全代码,让余数保存到data段注释中指定的单元 mov ah,2 mov dl,ds:[16] ; 补全代码,使得dl <-- data段中保存的商的字节单元数值 add dl,30H ; 补全代码,使得dl中的数值转换为数字字符 int 21h mov ah,2 mov dl,ds:[17] ; 补全代码,使得dl <-- data段中保存余数的字节单元数值 add dl,30H ; 补全代码,使得dl中的数值转换为数字字符 int 21h mov ax,4c00h int 21h code ends end start
2. 使用debug进行调试、跟踪、执行
(1)使用r命令和u命令确定指令的物理地址
(2)使用g命令执行
(3)可以看到屏幕上显示了结果12
-
实验任务二
1. 填写的代码:
assume cs:code, ds:data data segment db 12,35,96,55,67 data ends code segment start: mov bx,data mov ds,bx mov bx,0 mov si,0 mov cx, 5 s: mov ah,0 mov al,[si] mov bl,10 div bl mov bx,ax ;用寄存器bx来保存商和余数 mov ah,2 ;调用子程序输出商 mov dl,bl add dl,30H int 21h mov ah,2 ;调用子程序输出余数 mov dl,bh add dl,30H int 21h mov ah,2 ;调用子程序输出空格 mov dl,20h int 21h inc si loop s mov ax,4c00h int 21h code ends end start
2. 使用debug调试、跟踪、执行
(1)使用r命令和u命令确定指令的物理地址,然后用g执行
(2)可以看到按要求显示了“12 35 96 55 67”,每个数据之间用空格隔开
-
实验任务三
1. 填写的代码:
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 mov bx,0 mov bp,16 ;属性 mov di,071ch ;显存变量 mov cx,3 s: mov bx,cx mov si,0 ;每一个字母 mov cx,16 s0: mov ax,0 mov al,[si] ;地位字节存放字符ASCII码 mov ah,[bp] ;高位字节存放字符属性 mov es:[di],ax inc si add di,2h loop s0 add di,80h ;每行之间相差80h mov cx,bx inc bp loop s mov ax,4c00h int 21h code ends end start
2. 使用集成软件进行调试、执行
可以看到三行“welcome to masm!"按照绿色,绿底红字,白底蓝字显示出来了
-
练习
1. debug环境的练习
2. 集成软件的练习
-
总结与体会
1. 通过本次实验我更熟悉了汇编语言源程序的编写,也进一步巩固了debug的使用,使用了新学的指令,如div,还使用了新学的更灵活的内存单元地址的表示,例如[si]、[di]、[bp]等。
2. 通过前两个实验任务,熟悉了输出字符的子程序,显示了数据,通过实验任务三,还学会了自己编程实现向显存写入数据,达到了不同显示效果的目的