汇编语言 王爽 实验9 转移指令的原理

;2*Row+3=25 ==》Row = 11 
;2*Column + 16*2 = 160 ==》Column = 64 
;在下列示例中,BX代表从11行开始的首列,所以他的初始值是11*160=1760,即12行的首地址 
;对于显示屏要写的中间的内存地址用[BX].idata来表示,显然idata的初始值是64 
;处理的过程大致如下: 
;    R=第12行的地址 
;    mov cx,3 //这个字符串要显示三次 
;s:  C=第一个要修改的列 
;    mov cx,16 //共16个字符 
;s0: 改变R行,64+C列的字节为字符串的第一个字符,64+1+C为 
;    字符的属性。因为不同行有不同的显示,所以使用了jcxz 来判定 
;    现在是第几次显示. 
;    loop s0 
;    R = 下一行的地址即是R + 160 
;    loop s 

assume cs:code 
datasg segment 
    db 'welcome to masm!' 
datasg ends 
stacksg segment 
    db 16 dup(0) 
stacksg ends 
code segment 
    j1: mov al,00100100B    ;绿底红字 
        jmp j0 
    j2: mov al,01110001B    ;白底蓝字 
        jmp j0 
    start: 
        mov ax,stacksg 
        mov ss,ax 
        mov sp,16 
        mov ax,datasg 
        mov ds,ax 
        mov ax,0B800H 
        mov es,ax 
        mov cx,3 
        mov bx,1760 
        mov di,0 
        ;控制文字显示位置: BX and [bx].0 
        s: push cx 
            mov di,cx 
            mov si,0 
            mov cx,16 
            push bx 
            s0:  
                mov al,[si] 
                mov es:[bx].64,al 
                inc bx             
                mov al,00000010B    ;绿色                  
                push cx 
                mov cx,di 
                dec cx 
                jcxz j2 
                dec cx 
                jcxz j1 
            j0:    pop cx                  
                mov es:[bx].64,al 
                inc bx 
                inc si 
            loop s0              
        pop bx 
        pop cx 
        add bx,160 
        loop s          
        mov ax,4c00h  
        int 21h  
code ends 

end start

汇编确实有帮助了解整个computer如何工作,啃完王爽的汇编语言,接下来就是自己动手写操作系统了。

posted @ 2008-09-05 09:22  keep complex...  阅读(785)  评论(0编辑  收藏  举报