实验代码,ascii.asm如下:
;*****************************************
datarea segment
recol db 13,10,'$'
space db '$'
datarea ends
;*****************************************
prognam segment
assumecs:prognam,ds:datarea
;------------------------------------------
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
mov dl,10h
mov cx,15
;------------------------------------------
outside:
push cx
mov cx,16
;-------------------------------------------
inside:
mov ah,02h
int 21h
inc dl
push dx ;压入显示ASCII字符的dx,该段为显示空格
lea dx,space
mov ah,09h
int 21h
pop dx ;弹出dx,循环inside共16次,即一行显示16个字符
loop inside
push dx ;压入显示ASCII字符的dx,该段为显示换行
lea dx,recol
mov ah,09h
int 21h
pop dx ;弹出dx,继续输出其他字符
pop cx ;弹出cx,由15逐次减一实现15行的输出
loop outside
ret
main endp
;----------------------------------------------------
prognam ends
;****************************************************
end start
该实验是用表格形式显示字符,显示ASCII码对应的字符并不难,给dl寄存器赋10h,利用功能调用02h即可显示,然后给dl不断増1,循环显示输出即可。但题目要求用表格形式,输出15*16的字符,且字符之间有空格。所以需要在数据段datarea中定义换行recol和空格space,利用功能调用09h将其显示。另外需要注意的是,因为实际是一个ASCII码字符一个空格交替显示,所以使用一次02h功能调用后需要将dx压入栈中保存,再将recol或space的有效地址赋给dx,完成之后的09h功能调用,然后再弹出dx覆盖之前的地址值。
因为02h的功能调用是dl=输出字符,所以可以输出的ascii码无法超过FFh