我的方法估计是最笨重的啦, 呵呵
root@yeah /cygdrive/d/asm
$ cat lab9.asm
assume cs:code
str segment
db 'Welcome to masm!'
str ends
code segment
start:
mov ax,str ;把要显示的字符串
mov ds,ax ;装入DS
mov ax,0b800h ;把指定输出的地址
mov es,ax ;装入ES
mov bx,0 ;开始处理第一段字符串
mov bp,780h ;中心行起始地址ES:0780H
mov cx,8 ;这个780h是用A0h*0Ch获得的
a: mov al,[bx] ;在al位装入字符
mov ah,02h ;在ah位装入字符属性
mov es:[bp+40h],ax ;传送字符到目标地址ES
inc bx ;增量, 指向下一个字符
add bp,2 ;增量,指定下一个ES的偏移地址
loop a ;CS=0,退出循环。
mov bx,8 ;处理第二字符串
mov bp,780h ;解释同上
mov cx,2
b: mov al,[bx]
mov ah,24h
mov es:[bp+50h],ax
inc bx
add bp,2
loop b
mov bx,0bh
mov bp,780h
mov cx,5
c: mov al,[bx]
mov ah,0f1h
mov es:[bp+56h],ax
inc bx
add bp,2
loop c
mov ah,4ch
int 21h
code ends
end start
root@yeah /cygdrive/d/asm
$
我用了三个循环来处理要求不同显示的字符串,过于臃肿, 有机会再精简一下吧。 |