实验九遇到的问题,有哪位童鞋帮忙解惑?
第一版源码如下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 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
第二版修改后如下:
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]