call指令的跳轉原理:
cpu 執行 call 指令時,進行兩步操作:根據該原理進行分析:將當前的 ip 或 cs 和 ip 壓入棧中;
轉移。
使用debug進行測試:
發現猜想正確。
assume cs:code, ds:data
data segment
x db 99,72,85,63,89,97,55
len equ $-x
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bl,byte ptr 10;這個除數10應該為8位的資料,故採用byte形式。
mov si,offset x
mov cx,len
dec cx
s: call printnumber
call printspace
inc si
loop s
mov ax,4c00h
int 21
printnumber:
mov al,[si]
mov ah,0h
div bl;將al中的數除10,al中獲得了商(實際上的十位數),ah中獲得了餘數(實際上的個位數)。
mov dh,ah;ah在中斷顯示中必須為2,所以先把資料放在dh中。
mov ah,2
mov dl,al
or dl,30h;將ascii轉為ascii中對應的數字
int 21h;顯示十位數
mov dl,dh
or dl,30h
int 21h;顯示個位數
retprintspace:
mov ah,2
mov dl,' '
int 21h;輸出乙個空格
mov bh,0;設定了首字元位址指向x,長度為len,顏色黑底綠字,指定第一行
call printstr
mov ax, data;直接初始化
mov ds, ax
mov si,offset x
mov cx,len
mov bl,00001100b
mov bh,24;設定了首字元位址指向x,長度為len,顏色黑底紅字,指定第25行
call printstr;再次呼叫
mov ax, 4c00h
int 21h
printstr:
mov al,160
mul bh;在80*25顯示模式中,螢幕上每行有160個位元組,則將bh乘160即可讓bh代表螢幕上第幾行。
mov di,ax
s: mov al,[si]
mov es:[di],al;ascii碼
mov es:[di+1],bl;這個字元的顯示顏色
inc si
add di,2;轉到兩個位元組後下乙個顯示字元的位置
如果將**中 line 33 的 160 改為 1 ,則紅色的 try 會顯示在第一行的第 12(24/2)個字元位。
assume cs:code, ds:data
data segment
stu_no db '201983290518'
len = $ - stu_no
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
call printbluescreen;先畫藍屏底子
mov di,0f00h;在最後一行的第一位開始畫橫線
call printlines
call printnum
call printlines
mov ax,4c00h
int 21h
printbluescreen:
mov di,0h
mov cx,007d0h;整個螢幕可以顯示2000個字元,換算成八進位制就是07d。
mov al,00010000b
s: mov es:[di+1],al
add di,2
loop s
retprintlines:
mov al,0002dh;橫線的ascii碼
mov ah,00011111b
mov cx,00022h;34次
實驗3 轉移指令跳轉原理及其簡單應用程式設計
目錄 line27,彙編指令loop s1 跳轉時,是根據位移量跳轉的。通過debug反彙編,檢視其機器碼,分析其跳轉的位移量是多少?位移量數值以十進位制數值回答 從cpu的角度,說明是如何計算得到跳轉後標號s1其後指令的偏移位址的。line44,彙編指令loop s2 跳轉時,是根據位移量跳轉的。...
9 轉移指令的原理
1 可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。概括的講,轉移指令就是可以控制cpu執行記憶體中某處 的指令,8086cpu的轉移行為有兩種 1 只修改ip時,稱為段內轉移,比如 jmp ax 2 同時修改cs和ip時,稱為段間轉移,比如 jmp 1000 0 段內轉移又分為 1 短轉移...
9 轉移指令的原理
1.可以修改ip,或同時修改cs和ip的指令統稱轉移指令。概括地講,轉移指令就是可以控制cpu執行記憶體中某處 的指令。2.8086cpu的轉移行為有以下幾種 1 只修改ip時,稱為段內轉移。例如 jmp ax 2 同時修改cs和ip時,成為 段間轉移。例如 jmp 1000 0 3.由於轉移指令對...