代码及解释如下:
;在屏幕的指令位置(8行8列处以指定颜色输出 data段中的字符串),可记录到Blog
assume cs:code
data segment
db 'welcome to masm',0 ;data段定义好要输出的字符串,以'0'作为结束标志
data ends
stack segment
db 128 dup(0)
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
call init_data ;初始化数据
call show_str ;显示的方法
mov ax,4c00h
int 21h
;============================================================
init_data: mov ax,0B800h
mov es,ax
mov dh,8 ;指定行号
mov dl,8 ;指定列号
mov cl,00000011B;指定颜色
mov si,0
mov di,0
ret
;============================================================
show_str: call clear_screen ;清屏
call getRow ;获取指定行号的字节偏移数
call getCol ;获取指定列号
call show_String ;真正的显示字符串方法
ret
;============================================================
clear_screen: push cx
push dx
push es
push bx
mov cx,2000 ;一页有2000字符,每个字符2个字节
mov dx,0700h ;将屏幕上的双字用0700h代替
mov bx,0
clearScreen: mov es:[bx],dx
add bx,2
loop clearScreen
pop bx
pop es
pop dx
pop cx
ret
;============================================================
show_String: push cx ;保存下面将要用到的寄存器
push ds
push es
push dx
push si
push di
mov dh,cl ;高位存颜色
mov cx,0
showString: mov cl,ds:[si]
jcxz showStringRet
mov dl,ds:[si] ;低位存字符
mov es:[di],dx
add di,2
inc si
jmp showString
showStringRet: pop di ;还原寄存器
pop si
pop dx
pop es
pop ds
pop cx
ret
;============================================================
getRow: mov al,dh
mov bl,160 ;一行80字符,160字节
mul bl
mov di,ax
ret
;============================================================
getCol: mov al,dl
mov bl,2
mul bl
add di,ax
ret
;============================================================
code ends
end start
本文详细介绍了如何使用汇编语言在屏幕上指定位置输出字符串,通过代码实例解析了相关指令和流程,帮助读者理解汇编语言在低级别操作中的应用。
1693

被折叠的 条评论
为什么被折叠?



