2012年1月26日星期四

assembly language 实验九中的问题

在屏幕中间分别显示三种颜色的字符串“welcome to MASM”
80 * 25的彩色字符显示缓冲区

代码:


data segment
db 'welcome to MASM!'
db 02h,01h,04h
data ends


stack segment
dw 8 dup(0)
stack ends


code segment
    assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov bx,[11*160]
mov di,0
mov ax,0b800h
    
mov cx,3    ;outer loop
   s1: push cx
push ax
push di
mov es,ax
mov si,0
mov di,0

mov cx,16
   s2: mov al,ds:[di]
mov es:[bx+si],al
inc di
add si,2
loop s2      ;set the even byte in display memory

mov si,1     ;odd byte
pop di       ;set color
mov al,ds:[16+di]    ;load color
mov cx,16
   s3: mov es:[bx+si],al
add si,2
loop s3

;ready for next turn
inc di        ;next color style
pop ax
add ax,0ah
;add bx,160    ;next row
pop cx
loop s1

mov ah,4ch
int 21h
code ends
end start




这个是显示正常的,通过修改ax来改段地址(绿色字体),已达到指向下一行的目的。但是,我原先的想法是通过改变bx的值来指向下一行(红色字体),不知何故没有显示正常。。。囧
但是理论上应该是一样的啊??bx自增160到下一行的行首,和ax自增16效果应该是一样的啊。。。这里面有什么玄机?debug了好久也没找出来,菜了。。。。囧


没有评论:

发表评论