zoukankan      html  css  js  c++  java
  • 实验9 根据材料编程

    实验内容:

    1、补全程序 t1.asm,完成在屏幕上输出内存单元中的十进制两位数

    (1)实验源代码:

     1 ; 在屏幕上输出内存单元中的十进制两位数
     2 assume cs:code, ds:data
     3 data segment
     4      db 12
     5      db 0h,0h   ; 前一个字节用于保存商,后一个字节用于保存余数
     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
    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)实验结果:

    (3)实验分析:本题的核心代码为第21行与第26行,因为本体最后要输出内存单元中的十进制两位数,然而在ASCII表中字符型字符与相对应的数字型字符相差了48d,即30h。其他的就是一些基础的数据从哪来,提取出来进行操作并把数据进行存储的过程,相对容易。

    2、补全程序 t2.asm,完成在屏幕上输出 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       ; 补全程序,参考t1.asm,综合应用以下知识完成:
     8       ; (1) loop指令、内存单元地址的灵活表示
     9       ; (2) div指令, 数字→数字字符的转换
    10       ; (3) int 21h的2号子功能,完成单个字符输出的方法,即: 
    11       ;     mov ah,2
    12       ;     mov dl,待输出字符或其ASCⅡ码
    13       ;     int 21h
    14       ; (4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符
    15         mov ax,data
    16         mov ds,ax
    17         
    18         mov cx,5h
    19         mov si,0h
    20         mov bl,10
    21 
    22 s:      mov ah,0
    23         mov al,ds:[si]
    24         div bl
    25         mov ds:[si+5],al
    26         mov ds:[si+6],ah
    27         
    28         mov ah,2
    29         mov dl,ds:[si+5]
    30         add dl,30h
    31         int 21h
    32         
    33         mov ah,2
    34         mov dl,ds:[si+6]
    35         add dl,30h
    36         int 21h
    37 
    38         mov ah,2
    39         mov dl,32
    40         int 21h
    41 
    42         inc si
    43         loop s
    44       
    45         mov ax,4c00h
    46         int 21h
    47 code ends
    48 end start

     (2)实验结果:

    (3)实验分析:第二个小实验和第一个小实验很类似的。

    3、教材实验 9(P187)

    (1)实验源代码:

     1 ; p187 实验9
     2 
     3 assume ds:data, cs:code
     4 data segment
     5        db 'welcome to masm!'  
     6        db 2H,24H,71H          ;字符串属性值
     7 data ends
     8 
     9 code segment
    10 start:  mov ax,data
    11         mov ds,ax            ;字符串及属性值所在段的段地址送入ds
    12         
    13         mov ax,0b800H
    14         mov es,ax            ;80×25彩色字符模式显示缓冲区段地址送入es
    15         
    16         ; 添加代码,通过循环逐个将每个字符及其属性送入相应的显示缓冲区对应行
    17         ; 即:将data段的字符及属性通过循环逐个mov到显示缓冲区(es)段相应的单元内
    18         
    19         ; 可以先尝试分别写三段代码,每次完成一行的显示
    20         ; 程序运行起来后,再尝试通过灵活的寻址方式和循环,对三段代码修改和简化
    21         ; 学习第10章子程序后,还可以进一步完善优化,设计子程序,将行号、列号、颜色属性设置成入口参数
    22          mov bx,0
    23          mov si,0
    24          mov cx,16
    25 
    26 s0:      mov ax,[bx]
    27          mov es:[bx+720h][si],ax
    28          mov al,2               ;存放颜色属性值绿色
    29          mov es:[bx+721h][si],al
    30          inc bx
    31          inc si
    32          loop s0
    33      
    34 
    35          mov bx,0
    36          mov cx,16
    37          mov si,160
    38 
    39 s1:      mov ax,[bx]
    40          mov es:[bx+720h][si],ax
    41          mov al,36            ;绿底红色
    42          mov es:[bx+721h][si],al
    43          inc bx
    44          inc si
    45          loop s1
    46 
    47      
    48 
    49          mov bx,0
    50          mov cx,16
    51          mov si,320
    52 
    53 s2:      mov ax,[bx]
    54          mov es:[bx+720h][si],ax
    55          mov al,113            ;白底蓝色
    56          mov es:[bx+721h][si],al
    57          inc bx
    58          inc si
    59          loop s2
    60 
    61          mov ax,4c00h
    62          int 21h
    63 code ends
    64 end start

    (2)实验结果:

     4、实验总结:

    这次的3个实验中前两个实验较为简单,但第3个实验自己没有编写出来,应该多多增强自己编写代码的能力,多进行动手操作。

     

  • 相关阅读:
    HDR & Bloom
    Parallax Mapping
    Normal Mapping & Tangent Space
    Gamma校正背后的原理
    内存对齐及其原理
    关于深度值的一些需要说明的点
    帧缓冲(Framebuffer)
    面剔除和深度测试
    工具·MashLab调整网格模型坐标系
    工具·notepad++正则表达式替换文本
  • 原文地址:https://www.cnblogs.com/Vincent12/p/10121823.html
Copyright © 2011-2022 走看看