转移指令与彩色字符模式显示缓冲区笔记

转移指令:

(一)无条件跳转

1.段内短转移

jmp short 标号

ip=ip+8位偏移

范围:-128~127 即偏移用一个字节表示

机器码:EB XX              XX为16位偏移而不是地址

2.段内近转移:

jmp near ptr 标号

ip=ip+16位偏移

范围:-32769~32767

3.段间转移(远转移):

jmp far ptr 标号

CS=SA        IP=EA

按操作数的位置分:

1.jmp reg16

ip=(reg16)

2.转移地址在内存中:

(1)jmp word ptr 内存单元地址       (段内转移)

ip=内存单元的数值

(2)jmp dword ptr 内存单元地址         (段间转移)

cs=内存单元高位字

ip=内存单元低位字

(二)条件跳转:

1.jcxz     loop等条件跳转都是用位移表示

2.这样做利于内存中的浮动装配,提高复用性

3.jcxz在loop之前(同一个循环),则明显的,jcxz可以先于loop感知到cx=0

 

关于彩色字符模式显示缓冲区的编程:

1.b8000h~bffffh共32KB空间,为80×25彩色字符模式的显示缓冲区。

2.在该模式下:显示器显示25行,每行80字符

3.一个字符占两个字节,低字节存ascii码,高字节存属性

4.显示缓冲区分8页,每页4KB

第0页:b8000h~b8f9fh

5.

写个小例子:

assume cs:code,ds:data
data segment
db ‘hello  shadow  !’
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0b872h
mov es,ax

mov bx,0
mov si,0
mov cx,16

s1:    mov al,[bx]
mov es:[si],al
mov byte ptr es:[si+1],24h
inc bx
add si,2
loop s1

mov ax,4c00h
int 21h
code ends
end start