汇编实验——用表格形式显示字符串

时间:2021-12-06 22:12:55


       实验代码,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,循环inside16次,即一行显示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压入栈中保存,再将recolspace的有效地址赋给dx,完成之后的09h功能调用,然后再弹出dx覆盖之前的地址值。

        因为02h的功能调用是dl=输出字符,所以可以输出的ascii码无法超过FFh