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

    实验内容:

      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能力

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/acmblog/p/10108788.html
Copyright © 2011-2022 走看看