汇编语言 第九章 根据材料编程
1.在显示器的0行0列显示红底高亮闪烁的绿色字符串’ABCDEF’
assume cs:codesg,ds:datasg
datasg segment
db 'Hello world!'
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov ah,00001010B
mov bx,0B800H
mov es,bx
mov di,0
mov si,0
mov cx,16
s: mov al,[si]
;mov es:[di],
;mov es:[di+1],ah
mov word ptr es:[di],ax
inc si
add di,2
loop s
s1:
mov ax,4c00h
int 21h
codesg ends
end start
2.在屏幕中间显示字符串
注意问题:
a.在特定的行或列输出字符串
dw定义字节,(80×(行号)+列号)*2,一行80个字符,每个字符占两个字节,高8位定义类型,低8位定义具体字符
b.编译中出现的错误must be index or base register
使用寄存器间接寻址时,只可以使用 BX, BP, SI, DI 这四个寄存器中的一个,不可以使用其它寄存器。
assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
db 'welcome to masm!'
;定义输出字符类型的颜色
db 4Ah,4Ah,4Ah
dw (80*11+35)*2,(80*12+35)*2,(80*13+35)*2
datasg ends
stacksg segment
dw 8 dup(0)
stacksg ends
codesg segment
start:
;ds指向数据段
mov ax,datasg
mov ds,ax
;es指向输出的显存地址
mov bx,0B800H
mov es,bx
;数据段输出字符串的偏移量
mov si,0
;表示需要输出3行
mov cx,3
;19为数据段 对应的第一行
mov bx,19
;字符类型
mov ax,16
s:
;外循环入栈
push cx
mov cx,16
;指向对应的显存地址
mov di,[bx]
push bx
push ax
pop bx
s1:
;定义 输出字符类型
mov ah,[bx]
mov al,[si]
;屏幕输出位置
mov word ptr es:[di],ax
inc si
add di,2
loop s1
pop bx
pop cx
add bx,2
add ax,1
mov si,0
loop s
mov ax,4c00h
int 21h
codesg ends
end start