• 实验九


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

    ; 在屏幕上输出内存单元中的十进制两位数
    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指令。

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

  • 相关阅读:
    015_stdc_C语言
    014_stdc_C语言
    013_stdc_C语言
    012C语言
    011_stdc_C语言
    010_stdc_C语言
    009_stdc_C语言
    008_stdc_C语言
    40.委托
    39.多线程
  • 原文地址:https://www.cnblogs.com/makaya/p/10088648.html
Copyright © 2020-2023  润新知