(1. 补全程序t1.asm,完成在屏幕上输出内存单元中的十进制两位数
; 在屏幕上输出内存单元中的十进制两位数
assume cs:code, ds:data
data segment
db 12
db 0,0 ; 前一个字节用于保存商,后一个字节用于保存余数
data ends
code segment
start:
mov ax,data
mov ds,ax ; 补全指令,使得ds <-- data段地址
mov ah,0
mov al,ds:[0] ; ax <-- data段字节单元的被除数12
mov bl,10
div bl
mov ds:[1],al ; 补全代码,让商保存到data段注释中指定的单元
mov ds:[2],ah ; 补全代码,让余数保存到data段注释中指定的单元
mov ah,2
mov dl,ds:[1] ; 补全代码,使得dl <-- data段中保存的商的字节单元数值
add dl,30H ; 补全代码,使得dl中的数值转换为数字字符
int 21h
mov ah,2
mov dl,ds:[2] ; 补全代码,使得dl <-- data段中保存余数的字节单元数值
add dl,30H ; 补全代码,使得dl中的数值转换为数字字符
int 21h
mov ax,4c00h
int 21h
code ends
end start
编译、连接、运行之后结果:
(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,data
mov ds,ax
mov bx,0
mov cx,5
s: mov ah,0
mov al,ds:[bx]
mov dl,10
div dl
mov dl,al
mov dh,ah
mov ah,2
add dl,30h
int 21h
mov ah,2
mov dl,dh
add dl,30h
int 21h
mov ah,2
mov dl,0
int 21h
inc bx
loop s
mov ax,4c00h
int 21h
code endsend start
编译、连接、运行之后结果:
(3.书P187实验9:
; 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
mov ax,0b800H
mov es,ax
mov cx,3
mov si,1824
mov di,16
s0:mov dx,cx
mov cx,16
mov bx,0
s1:mov al,[bx]
mov ah,[di]
mov es:[si],ax
inc bx
add si,2
loop s1
inc di
add si,80h
mov cx,dx
loop s0
mov ax,4c00h
int 21h
code ends
end start
编译、连接、运行之后结果:
总结:
实验一二总体思路上大同小异,提示也比较多,实验三花了一点时间去写,熟悉了运用循环,双重循环压栈保护cx,而对于多重循环,loop只能判断CX的值,要多重循环时,就必须给CX重新赋值,之后对于汇编中彩色字符有了初步的掌握。