• 实验9


    t1

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

    t2

    assume cs:code, ds:data, ss:stack
    data segment
        db 12, 35, 96, 55, 67
    data ends
    
    stack segment
        dw 0,0
    stack ends
    
    code segment
    start:
        mov ax, data
        mov ds, ax
        mov ax, stack
        mov ss, ax
        mov sp, 0005h
    
        mov cx, 5
        mov si, 0
    s1:
        push cx
        mov cx, 2
        mov di, 0
    
        mov ah, 0;
        mov al, [si]
        mov bl, 10
        div bl
        push ax
    s2:
        mov ah, 2
        mov dl,ss:[di]
        add dl, 30h
        int 21h
        add di, 1
    loop s2
        inc si
        pop ax
        pop cx
    
        mov ah, 2
        mov dl, ' '
        int 21h
    loop s1
    
        mov ax, 4c00h
        int 21h
    code ends
    end start

    用了下栈,出了点问题

    t3

    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            ;字符串及属性值所在段的段地址送入ds
    
            mov ax,0b800H
            mov es,ax            ;80×25彩色字符模式显示缓冲区段地址送入es
    
            mov si, 0
            mov di, 30h
            mov cx, 16
    
        s:
            mov al, ds:[si]
            mov byte ptr es:06E0h[di], al
            inc di
            mov al, ds:[10h]
            mov byte ptr es:06E0h[di], al
            inc di
            inc si
        loop s
    
            mov si, 0
            mov di, 30h
            mov cx, 16
        s1:
            mov al, ds:[si]
            mov byte ptr es:0780h[di], al
            inc di
            mov al, ds:[11h]
            mov byte ptr es:0780h[di], al
            inc di
            inc si
        loop s1
    
            mov si, 0
            mov di, 30h
            mov cx, 16
        s2:
            mov al, ds:[si]
            mov byte ptr es:0820h[di], al
            inc di
            mov al, ds:[12h]
            mov byte ptr es:0820[di], al ;繁版截图出现问题的地方
            inc di
            inc si
        loop s2
    
            mov ax,4c00h
            int 21h
    code ends
    end start

    简洁后:

    assume ds:data, cs:code, ss:stack
    data segment
           db 'welcome to masm!'
           db 2H,24H,71H          ;字符串属性值
    data ends
    
    stack segment
        db 0
    stack ends
    
    code segment
    start:  mov ax,data
            mov ds,ax            ;字符串及属性值所在段的段地址送入ds
    
            mov ax,0b800H
            mov es,ax            ;80×25彩色字符模式显示缓冲区段地址送入es
    
            mov ax, stack
            mov ss, ax
            mov sp, 2
    
            mov bx, 06E0h; 来控制行
            mov bp, 10h; 来控制色彩
            mov cx, 3
        s0:
            push cx
            mov si, 0
            mov di, 30h
            mov cx, 16
        s:
            mov al, ds:[si]
            mov byte ptr es:[bx][di], al
            inc di
            mov al, ds:[bp]
            mov byte ptr es:[bx][di], al
            inc di
            inc si
        loop s
    
            add bx, 0a0h
            inc bp
            pop cx
        loop s0
    
            mov ax,4c00h
            int 21h
    code ends
    end start

    第一张图为繁版,第二张为简版

    繁版出现问题的原因是:我在设置色彩属性时0820h 没有加h,导致色彩不对。

    总结:

    当知识掌握的不牢固的时候,debug是一件很痛苦的事情。

  • 相关阅读:
    Linux内核编译
    Linux系统启动流程(2)
    Linux系统启动流程及grub重建(1)
    shell函数
    css基础
    前端之练习抽屉首页
    css简单分页
    mysql索引提高查询速度
    html基础
    博客园css样式代码
  • 原文地址:https://www.cnblogs.com/sunguanglin/p/10097756.html
Copyright © 2020-2023  润新知