彙編語言(王爽) 第9章轉移指令的原理

啥叫轉移指令oop

修改IP或同時修改CS和IP的指令字體

只修改IP叫段內轉移code

同時修改CS和IP叫段間轉移htm

段內轉移又分爲短轉移和近轉移ip

短轉移 IP修改範圍-128-127內存

近轉移IP修改範圍-32768-32767編譯器

基本的就上面的it

9.1 offset 操做符io

s1:mov bx,offset s1asm

s:mov ax,offset s

offset X就是取得X的偏移地址

first 就是mov bx,ds:ds:[0]

second  is mov ax,ds:[3]

first instruction is 3 byte

9.3 依據位移轉移的JMP指令

jmp short 標號(轉到標號處執行指令)

其實跳到哪裏是看指令的偏移地址,上面說法是錯的,好比實驗8,分析一個奇怪的程序

9.4 指定轉移目的地的指令

jmp far ptr段間轉移 遠轉移

好比 jmp far ptr s 對應的機器碼是EA 0B 01 BD 0B

高地址0bdbh是轉移的段地址,低地址010bH是偏移地址

9.5 jmp 寄存器

jmp ax

設置IP=ax

9.6 轉移地址在內存中的jmp指令

1 jmp word ptr 內存單元地址(段內轉移)

mov ax,0123h

mov ds:[0],ax

jmp word ptr ds:[0]

執行後ip=0123h

2 jmp dwood ptr 內存單元地址(段間轉移) 2個字

mov ax,0123h

mov ds:[0],ax

mov word ptr ds:[2],0

jmp dword ptr ds:[0]

執行後cs=0.ip=0123h

9.7 jcxz

if(cx==0) jmp short 標號

9.8 loop

cx--

if(cx!=0) jmp short 標號

9.10 編譯器對轉移位移越界會報錯

好比

jmp short s

db 128 dup (1)

s:mov ax,0111h

由於short的IP偏移地址是-128-127

因此超過了1,報錯

下面是實驗8一個奇怪的實驗,主要考察dmp short 標號指令的偏移應用

http://tinylab.org/assembly/sy/sy8.htm

實驗9是一個在DOS上打文字的程序

assume cs:code,ds:data
data segment
db 'welcome to masm!'
db 02h,24h,24h
data ends
code segment
start:
mov ax,0b872H
mov es,ax

mov ax,data
mov ds,ax

mov bx,0
mov cx,16
mov di,0
s:
mov al,ds:[bx]
mov ah,ds:[18]
mov es:[di],ax
inc bx
add di,2
loop s

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

源代碼就這樣

反正是在顯存段b8000H-b8f9fH進行,2個字節的長度,一個放ASCII碼另外一個放屬性

屬性就是指背景色,字體色這些

EOF

相關文章
相關標籤/搜索