• 第九章实验


    实验结论

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

    1、源代码

     1 ; 在屏幕上输出内存单元中的十进制两位数
     2 assume cs:code, ds:data
     3 data segment
     4      db 12
     5      db ?,?   ; 前一个字节用于保存商,后一个字节用于保存余数
     6 data ends
     7 code segment
     8 start:
     9       mov ax,data
    10       mov ds,ax        ; 补全指令,使得ds <-- data段地址
    11       
    12       mov ah,0
    13       mov al,ds:[0]   ; ax <-- data段字节单元的被除数12
    14       mov bl,10;除数为16位,被除数应为32位,并没有设定高十六位的值给DX???(默认为0)?
    15       div bl
    16       mov  ds:[1],al    ; 补全代码,让商保存到data段注释中指定的单元
    17       mov  ds:[2],ah    ; 补全代码,让余数保存到data段注释中指定的单元
    18 
    19       mov ah,2
    20       mov dl,ds:[1]    ; 补全代码,使得dl <-- data段中保存的商的字节单元数值
    21       add dl,30h     ; 补全代码,使得dl中的数值转换为数字字符
    22       int 21h
    23 
    24       mov ah,2
    25       mov dl,ds:[2]   ; 补全代码,使得dl <-- data段中保存余数的字节单元数值
    26       add dl,30h ; 补全代码,使得dl中的数值转换为数字字符      
    27       int 21h
    28 
    29       mov ax,4c00h
    30       int 21h
    31 code ends
    32 end start

    2、运行结果

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

    1、源代码

     1 assume cs:code, ds:data
     2 data segment
     3      db 12,35,96,55,67,?,?
     4 data ends
     5 code segment
     6 start:
     7      mov ax,data
     8      mov ds,ax
     9      mov cx,5
    10      mov si,0
    11 s:    mov ah,0
    12       mov al,ds:[si] ;不可使用ds:[bx],因为后面bx的值会被覆盖
    13       inc si
    14       mov bl,10
    15       div bl
    16       mov  ds:[6],al   
    17       mov  ds:[7],ah   
    18  
    19       mov ah,2
    20       mov dl,ds:[6]   
    21       add dl,30h    
    22       int 21h
    23       mov ah,2
    24       mov dl,ds:[7]   
    25       add dl,30h    
    26       int 21h
    27       mov ah,2 
    28       mov dl,20h
    29       int 21h
    30       loop s
    31      
    32       mov ax,4c00h
    33       int 21h
    34 code ends
    35 end start

    2、运行结果

     三、实验三:在屏幕中间分别显示不同颜色的要求字符串 

    1、源代码

     ①初代

     1 assume ds:data, cs:code
     2 data segment
     3        db 'welcome to masm!'  
     4        db 2H,24H,71H          ;字符串属性值依次为:绿色、绿底红色、白底蓝色
     5 data ends
     6 
     7 code segment
     8 start:  mov ax,data
     9         mov ds,ax            ;字符串及属性值所在段的段地址送入ds
    10         
    11         mov ax,0b800H         ;0b800与b800的区别在哪儿?
    12         mov es,ax            ;80×25彩色字符模式显示缓冲区段地址送入es
    13         
    14         mov cx,16
    15         mov bx,0
    16         mov si,64
    17 s:      mov ah,ds:[bx]
    18         mov es:[si],ah
    19         inc si
    20         mov al,2h
    21         mov es:[si],al
    22         inc si
    23         inc bx
    24         loop s
    25                
    26         mov cx,16
    27         mov bx,0
    28         mov si,224       ;64+160最简单的调整字符位置方法
    29 s1:      mov ah,ds:[bx]
    30         mov es:[si],ah
    31         inc si
    32         mov al,24h
    33         mov es:[si],al
    34         inc si
    35         inc bx
    36         loop s1
    37         
    38                        
    39         mov cx,16
    40         mov bx,0
    41         mov si,384        ;224+160调整字符位置,有点过于直白
    42 s2:      mov ah,ds:[bx]
    43         mov es:[si],ah
    44         inc si
    45         mov al,71h
    46         mov es:[si],al
    47         inc si
    48         inc bx
    49         loop s2
    50         
    51         
    52        
    53 
    54         mov ax,4c00h
    55         int 21h
    56 code ends
    57 end start

    ②改进后的代码

     1 assume ds:data, cs:code
     2 data segment
     3        db 'welcome to masm!'  
     4        db 2H,24H,71H          ;字符串属性值依次为:绿色、绿底红色、白底蓝色
     5 data ends
     6 
     7 code segment
     8 start:  mov ax,data
     9         mov ds,ax            ;字符串及属性值所在段的段地址送入ds
    10         
    11         mov ax,0b800H
    12         mov es,ax            ;80×25彩色字符模式显示缓冲区段地址送入es
    13         
    14         mov cx,16
    15         mov bx,0
    16         mov si,64
    17 s:      mov ah,ds:[bx]
    18         mov es:[si],ah
    19         mov ah,ds:[bx]
    20         mov es:[si+160],ah
    21         mov ah,ds:[bx]
    22         mov es:[si+320],ah
    23         inc si
    24         mov al,2h
    25         mov es:[si],al
    26         mov al,24h
    27         mov es:[si+160],al
    28         mov al,71h
    29         mov es:[si+320],al
    30         inc si
    31         inc bx
    32         loop s
    33                
    34         
    35 
    36         mov ax,4c00h
    37         int 21h
    38 code ends
    39 end start

     2、运行结果

    总结与体会

     1、掌握了编写一个在屏幕输出相应字符的程序,以及如何在屏幕上输出一个数字字符

     2、可以使用多种多种寻址方式,灵活进行寻址,简化操作过程

     3、div的使用,除数为8位和16位,将被除数放的位置不同,使用时应该注意

  • 相关阅读:
    作为Bootstrap中文站维护者-我们再次翻译BootstrapVue项目
    在vs2017和vs2019下发布应用之Windows程序打包-附图标修改和默认安装路径定义全教程
    Windows应用开发中程序窗口中的各种图标尺寸规划
    SVN设置忽略文件列表以及丢失了预定增加的文件解决方法
    基于VuePress构建高基于markdown语法的网站全教程
    国家高新技术企业门户与移动全生态开发套件-Zooma!逐浪CMS v8.1.4正式发布
    Json跨域登录问题的之Access-Control-Allow-Origin 站点跨域请求的问题
    IIS设置URL重写,实现页面的跳转的重定向方法
    163邮件:554 DT:SPM 163 smtp11,D8CowABHLj7jX_BdY+q6Ag--.21946S2 1576034275,please see http://mail.163.com/help/help_spam_16.htm?ip=117.22.255.130&hostid=smtp11&time=1576034275
    读《阿里巴巴Java开发手册 1.4.0》笔记
  • 原文地址:https://www.cnblogs.com/xihongqing/p/10078466.html
Copyright © 2020-2023  润新知