实验九

实验一:完成在屏幕上输出内存单元中的十进制两位数

; 在屏幕上输出内存单元中的十进制两位数
assume cs:code, ds:data
data segment
     db 12
     db ?,?   ; 前一个字节用于保存商,后一个字节用于保存余数
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,'0'       ; 补全代码,使得dl中的数值转换为数字字符
      int 21h

      mov ah,2
      mov dl,ds:[2]     ; 补全代码,使得dl <-- data段中保存余数的字节单元数值
      add dl,'0'        ; 补全代码,使得dl中的数值转换为数字字符      
      int 21h

      mov ax,4c00h
      int 21h
code ends
end start

 如图所示,输出了12。

实验二:完成在屏幕上输出 data 段定义的 5 个十进制两位数,数据和数据 之间以空格间隔。

 

assume cs:code,ds:data
data segment
     db 12,35,96,55,67
data ends
code segment
start:
      mov ax,data
      mov ds,ax
      
      mov bi,0 
      mov cx,5  
    s:mov ax,0 
      mov al,[bi]   
      mov bl,10  
      div bl
      
      mov bx,ax

      mov dl,'0'
      add dl,bl
      mov ah,2
      int 21h
 
      mov dl,'0'
      add dl,bh
      mov ah,2
      int 21h

      mov ah,2
      mov dl,32
      int 21h

      inc bi
      loop s
      
      mov ax,4c00h
      int 21h
code ends
end start

 实验截图如下:

 

实验三:教材实验 9(P187)

 因为在80*25彩色字符显示下要求字符串显示在屏幕正中央,因此选择在11,12,13行显示。可算出第11行的偏移地址为0b800h。再根据资料上写的偶数地址存放字符,奇地址存放字符的颜色属性进行存放。思路是两个循环,一个循环进行每一行字符的输出,另一个循环使得输出三行。

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,0b800h
        mov di,16
     s0:mov dx,cx
        mov bx,0
        mov cx,16
      s:mov al,[bx]
        mov ah,[di]
        mov es:[si],ax
        add si,2 ;后移输出位置
        inc bx ;后移字符
        loop s
             
        add si,80h ;换行
        inc di
        mov cx,dx
        loop s0

        mov ax,4c00h
        int 21h
code ends
end start

 实验结果如下:

 

实验总结

 在学习了基本的程序指令之后,可以自己写出一个比较完整的程序了。

通过做实验一以及实验二,使我更加细致了解了div指令。

通过做实验三,我发现熟练掌握灵活的定位内存地址,以及熟练掌握多重循环的运用会使得实验步骤大大简化。

posted @ 2018-12-08 18:43  Jadeite  阅读(126)  评论(0编辑  收藏  举报