• 实验九--根据材料编程


    实验内容:

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

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

    编译,连接和运行:

    总结和体会:

    这个小实验因为add 少打了一个","导致编译总是不通过

    补全指令,使得ds <-- data段地址,不能直接移动,要通过中间量ax才可以

    另外如果要将某内存单元的数据移入一个地址中,可以直接地址操作

    2. 补全程序 t2.asm,完成在屏幕上输出 data 段定义的 5 个十进制两位数,数据和数据 之间以空格间隔。

    assume cs:code, ds:data
    data segment
         db 12,35,96,55,67
    data ends
    code segment
    start:
        ; 补全程序,参考t1.asm,综合应用以下知识完成:
        ; (1) loop指令、内存单元地址的灵活表示
        ; (2) div指令, 数字→数字字符的转换
        ; (3) int 21h的2号子功能,完成单个字符输出的方法,即: 
        ;     mov ah,2
        ;     mov dl,待输出字符或其ASCⅡ码
            ;   int 21h
            ; (4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符
    
            mov ax,data
        mov ds,ax
        mov cx,5h
        mov di,0h
    
    s:    mov ah,0
        mov al,ds:[di]
        mov bl,10
        div bl
        mov ds:[5],al
        mov ds:[6],ah
        
        mov ah,2
        mov dl,ds:[5]
        add dl,30h
        int 21h
        
        mov ah,2
        mov al,ds:[6]
        add dl,30h
        int 21h
    
        mov ah,2
        mov dl,32
        int 21h
    
        add di,1h
        loop s
        
        mov ax,4c00h
        int 21h
    code ends
    end start
          
          mov ax,4c00h
          int 21h
    code ends
    end start

    编译,连接和执行

    实验结论:第二个小实验和第一个小实验很类似的,只不过是多了几组数和循环罢了

    3. 教材实验 9(P187)

    ; p187 实验9
    
    assume ds:data, cs:code
    data segment
           db 'welcome to masm!'  ;共16个字符
           db 2H,24H,71H          ;字符串属性值
    data ends
    
    code segment
    start:  mov ax,data
            mov ds,ax            ;字符串及属性值所在段的段地址送入ds
            
            mov ax,0b800H         ;显示区缓存地址开始位置,想要打印到屏幕,就需要这个地址
            mov es,ax            ;80×25彩色字符模式显示缓冲区段地址送入es
            
            ; 添加代码,通过循环逐个将每个字符及其属性送入相应的显示缓冲区对应行
            ; 即:将data段的字符及属性通过循环逐个mov到显示缓冲区(es)段相应的单元内
            
            ; 可以先尝试分别写三段代码,每次完成一行的显示
            ; 程序运行起来后,再尝试通过灵活的寻址方式和循环,对三段代码修改和简化
            ; 学习第10章子程序后,还可以进一步完善优化,设计子程序,将行号、列号、颜色属性设置成入口参数
         
    
         mov bx,0
         mov si,0
         mov cx,16
    
    s0:  mov ax,[bx]
         mov es:[bx+720h][si],ax
         mov al,2               ;存放颜色属性值绿色
         mov es:[bx+721h][si],al
         inc bx
         inc si
        loop s0
     
    
         mov bx,0
         mov cx,16
         mov si,160
    
    s1:  mov ax,[bx]
         mov es:[bx+720h][si],ax
         mov al,36            ;绿底红色
         mov es:[bx+721h][si],al
         inc bx
         inc si
         loop s1
    
     
    
         mov bx,0
         mov cx,16
         mov si,320
    
    s2:  mov ax,[bx]
         mov es:[bx+720h][si],ax
         mov al,113            ;白底蓝色
         mov es:[bx+721h][si],al
         inc bx
         inc si
         loop s2
    
         mov ax,4c00h
         int 21h
    code ends
    end start

    这段程序,参考了网上的别人的答案

    编译和运行后

    总结:这次实验是通过网上的资源才完成的,不过是在理解后自己又手写一遍的

    看来还是要加强code能力

  • 相关阅读:
    Java:Socket通信
    菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章
    tolua reference
    严格符合CommonJS规范的包特性
    C++第11周(春)项目3
    Android动态逆向分析工具ZjDroid--脱壳神器
    报文格式【定长报文】
    OC3大回调模式使用总结(三)block回调
    Qt creator 编译错误 :cannot find file .pro qt
    OpenCV【2】---读取png图片显示到QT label上的问题
  • 原文地址:https://www.cnblogs.com/acmblog/p/10108788.html
Copyright © 2020-2023  润新知