实验一:在屏幕上输出内存单元中的十进制两位数
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
实验代码如下:
由实验微视频可知:如果除数为8位,则AL储存除法操作的商,AH储存除法操作的余数;如果除数为16位,则AX储存除法操作的商,DX储存除法操作的余数
因为data不能直接调用,所以间接放在ax中; int 21h的2号子功能,完成单个字符输出的方法,2号中断表示在显示器屏幕上显示;
实验结果:
实验二:
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
实验代码如下:
实验二和实验一相类似,实验一是单个数据输出,实验二则是多组,所以是要用loop指令,且多加一组空格控制间距。
实验三:在屏幕中间分别显示绿色,绿底红色,白色蓝底的字符串’welcome to masm!’
实验代码如下:
重点: 三次循环,控制颜色的二进制(00000010b,00100100b,01110001b);
实验结果: