(2011.11.01)汇编_王爽_第09章_学习小结

  

(2011.11.01)汇编_王爽_第09章_学习小结

本章内容:

1. 转移指令——同时修改CS和IP的指令的统称。

2. 段内转移——只修改IP

           ——短转移——IP修改范围为 -128至127.

                      ——近转移——IP修改范围为 -32768 至 32767

3. 段间转移——同时修改CS和IP

4. offset功能是取得标号的偏移地址。

5. jmp无条件转移指令,可以只修改IP,也可以同时修改CS和IP

6. jmp short 标号[IP]  jmp near 标号[IP]  jmp far 标号[CS:IP] jmp 16位的reg[IP]

7. jmp word ptr 内存单元地址(段内转移)  jmp dword ptr 内存单元地址(段间转移)

8. jcxz 标号(如果(cx) = 0, 转移到标号处执行。)

 

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

; 程序名称:实验9_根据材料编程_在屏幕中间显示不同颜色的字符串.asm

; 程序功能:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'Welcome to masm'

 

; 程序材料:

; 在内存中,有一个 80 * 25 彩色字符模式显示缓冲区,B8000H - BFFFFH 共 32KB 的空间。

; 需记忆:向这个地址空间写入数据,写入的内容将立即出现在显示器上。

; 显示器可以显示25行,每行80个字符,每个字符可有256种属性(背景色,前景色,闪烁,高亮等组合信息)

; 一行共有80个字符,占160个字节。

; 一个字符在内存中占两个字节,(偶地址)低位存放字符的ASCII码,(奇地址)高位存放字符的属性。

; 例:

; 在B8000H至B8F9FH为第一屏(25行,9+F=25-1),其中,偏移地址 000 - 09F 对应显示器上的第一行,(9F = 10 * 16 - 1)

; 属字节的格式:

;               7  6  5  4  3  2  1  0

;               BL R  G  B  I  R  G  B

; 当它们的位数为1的时候会被激活:BL(7):闪烁,(654)背景,I(3)高亮,(210)前景色,R(4,2)红色,G(5,1)绿色,B(6,0)绿色.

; 注意:

; 闪烁的效果必须在全屏DOS方式下才能看到。

 

; 程序分析:

; 简单地说,编写该程序的方法就是将字符放到B8000H - BFFFFH的空间就可以了。

; 那么,这里可以使用mov 指令,还有loop指令。

 

assume cs:code, ds:data

 

; 开始定义数据段,也就是题目要求的字符

data segment

    db 'welcome to masm!'

data ends

 

; 开始定义代码段,并且设定程序执行的入口

code segment

start:

    mov ax, data       ; 找到字符串的起点

    mov ds, ax

 

    mov al, 8          ; 设定段地址

    mov ah, 12

    mov es, ax

    

    mov bx, 31          ; 设定字符偏移地址的起点,列

    add bx, 384         ; 行

    mov si, 0           ; 一行有80个字符,要显示的有15个字符

    mov di, 0           ; 要将字符放到中间,先设定中点为40,然后向两间展开

                        ; 也就是说,左边是40 - 7 = 33, 33 - 1 = 31

                        ; 减1原因,由零开始

    mov cx, 15          ; 循环十五次

    ; 先将 'welcome to masm!' 这十五个字符放入到屏幕中间

putcharin:

    mov al, ds:[si]     ; 放入字符

    mov es:[bx+di], al

    inc di

    

    ; 开始设置字体颜色,但由于每个字符串的颜色不同,所以这里需要设置几个循环跳点

    cmp si, 7

    jae near ptr c7     ; >=7时,跳到C7

    

c0: 

    mov al, 01000000B   ; 绿色

    

    jmp near ptr endloop

 

c7:

    cmp si, 11

    jae near ptr c11

    

    mov al, 00100100B   ; 绿底红色

       

    jmp near ptr endloop

    

c11:

    mov al, 01110001B       ; 白底蓝色

 

endloop:

    mov es:[bx + di], al

    inc si

    inc di

    loop putcharin

    

    mov ax, 4c00h

    int 21h

code    ends

end start


   

            

你可能感兴趣的:(编程,c,汇编,dos)