|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 黑洞yyh 于 2013-10-12 16:21 编辑
编译链接完之后,用cmd去打开,直接双击是看不出效果的,在UE上运行也是看不到效果的。
assume cs:codesg,ds:datasg,ss:stacksg
;定义一个数据段datasg segment
db "Kawayi girl is my love!" ;字符 0h[]
db 02h,24h,71h; ;颜色 10h[]
datasg ends
stacksg segment
dw 3 dup(0) ;栈
stacksg ends
codesg segment
;合并了一下而已,整理了下,简洁了点,
;编写这个不难额,先从显示一个字符开始,
;之后到显示一行字符,最后就能知道怎么显示多行字符了!
start:
mov ax,datasg ;数据段
mov ds,ax
mov ax,stacksg ;栈段
mov ss,ax
mov ax,0b872h ;显存地址
mov sp,10h ;栈底为10h处,入栈sp=sp-2
;=========================================================================
mov bx,0 ;字符索引
mov di,0 ;颜色索引
mov si,0 ;显存偏移
;=========================================================================
mov cx,3 ;大循环3次
s1:
push cx; ;因为cx会被影响,所以先入栈,第一次cx为3
push ax; ;保存起始显存地址
;=========================================================================
mov si,0 ;显存偏移清零,从下一行的起始地方开始
mov bx,0 ;字符索引清零,表示从字符的第一个字符开始
;=========================================================================
mov es,ax ;定位显存地址
;=========================================================================
mov cx,17h ;16个字符,16次循环
s2:
mov al,ds:[bx] ;字符,因为是字节型所以要用al转存
mov es:[si],al ;显存位置
inc si
mov al,ds:17h[di] ;颜色 ,可以将10h[] ====c语言数组
mov es:[si],al ;显存位置
inc bx; ;索引下一个
inc si;
loop s2
;=========================================================================
pop ax; ;ax出栈,顺要跟入栈相反
pop cx
add ax,0ah ;指向下一行
inc di; ;颜色索引下一个
loop s1;
;=========================================================================
;程序返回cmd界面
mov ax,4c00h
int 21h
;=========================================================================
codesg ends
end start
|
|