wanyiwan 发表于 2018-7-11 14:00:39

实验九遇到的问题,有哪位童鞋帮忙解惑?

第一版源码如下

assume cs:code,ds:data

data segment

        db "welcome to masm!"                ;定义要显示的字符串
        db 02h,24h,71h                                ;定义三种颜色属性

data ends

code segment

start:
                mov ax,data
                mov ds,ax
               
                mov ax,0b872h
                mov es,ax
                mov bx,0
                mov si,0
                mov cx,16
               
        x1:        mov al,
                mov es:,al
                mov es:,al
                mov es:,al
                inc bx
                add si,2
                loop x1                                ;循环字符
               
                mov si,1
                mov cx,16
               
        x2:        mov al,
                mov es:,al
                mov al,
                mov es:,al
                mov al,
                mov es:,al
                add si,2
                loop x2                                ;循环属性
               
                mov ax,4c00h
                int 21h
code ends

end start

单步调试如图,首字母w没有显示出来,而且没有颜色。可能是因为后面的属性循环还没有执行的原因。


第二版源码如下

assume cs:code,ds:data

data segment

        db "welcome to masm!"                ;定义要显示的字符串
        db 02h,24h,71h                                ;定义三种颜色属性

data ends

code segment

start:
                mov ax,data
                mov ds,ax
               
                mov ax,0b872h
                mov es,ax
                mov bx,0
                mov si,0
                mov cx,16
               
        x1:        mov al,
                mov es:,al
                mov es:,al
                mov es:,al                                ;循环字符
               
                mov ah,ds:
                mov es:,ah
                mov ah,ds:
                mov es:,ah
                mov ah,ds:
                mov es:,ah                                ;循环属性

                inc bx
                add si,2
                loop x1
               
                mov ax,4c00h
                int 21h
code ends

end start

单步调试如图,颜色已经有了,但是首字母w还是没有显示出来。这是什么原因?

rouer39 发表于 2019-2-20 21:51:41

本帖最后由 rouer39 于 2019-2-20 22:17 编辑

第一版源码,修改后如下
assume cs:code,ds:data

data segment

      db 'welcome to masm!'                ;定义要显示的字符串
      db 02h,24h,71h                              ;定义三种颜色属性

data ends

code segment

start:
        mov ax,data
        mov ds,ax
               
        mov ax,0b872h
        mov es,ax
        mov bx,0    ;定位数据段
        mov si,0    ;定位目标列索引
        mov cx,10H
               
x1: mov al,
        mov es:,al
        mov es:.0A0H,al
        mov es:.0A0H.0A0H,al
        inc bx
        add si,2
        loop x1                              ;循环字符
   
        mov bx,0                           ;把bx归0,如果不归0的话也可以,下面的.16,.17,.18改成,.1,.2 因为它从第一个循环下来的时候bx已经为16
        mov si,1                           ;定位奇数
        mov cx,10H
               
x2: mov ah,.16             ;为 ds:0 起始02h在ds:.16
        mov es:,ah
        mov ah,.17
        mov es:.0A0H,ah
        mov ah,.18
        mov es:.0A0H.0A0H,ah
        add si,2
        loop x2                              ;循环属性
               
        mov ax,4c00h
        int 21h
code ends

end start

rouer39 发表于 2019-2-20 22:25:49

第二版修改后如下:
assume cs:code,ds:data

data segment

      db 'welcome to masm!'                ;定义要显示的字符串
      db 02h,24h,71h                              ;定义三种颜色属性

data ends

code segment

start:
        mov ax,data
        mov ds,ax
               
        mov ax,0b872h
        mov es,ax
        mov bx,0
        mov si,0
        mov cx,16
               
      x1:mov al,
                   mov ah,ds:
                   mov es:,ax
                  
                   mov ah,ds:
                   mov es:.160,ax
                  
                   mov ah,ds:
                   mov es:.320,ax
                  
                   inc bx
                   add si,2
                   loop x1
                  
                   mov ah,4ch
                   int 21h
code ends

end start
页: [1]
查看完整版本: 实验九遇到的问题,有哪位童鞋帮忙解惑?