3. 暫存器(記憶體) | 問題 3.7 - 3.10

Leon大帝發表於2024-03-08

問題 3.7

程式設計, 將 10000H ~ 1000FH 做為連本帶利,初始狀態是空的,將AX,BX,DS 中的資料入棧。

# 初始化SS, SP ss=1000H [sp]=[0010] , 則 [ssss:sp] = [1000H:0010H]
mov ax,1000
mov ss,ax
# sp是指標,不是段暫存器,可以直接傳資料,不用ax中轉
mov sp,0010
push ax
push bx
push ds

問題 3.8

程式設計:
將 10000H ~ 1000FH 當做棧, 初始狀態棧是空的

設定 ax=001aH, bx=001bH
ax,bx 資料入棧
ax,bx 清零
從棧中恢復 ax,bx 的值
mov ax,1000H
mov ss,ax
mov sp,0010H

mov ax,001a
mov bx,001b

push ax
push bx

# 將 ax 清零也可以用 sub ax,ax 機器碼為 兩個位元組, mov ax,0 機器碼為 3個位元組
mov ax,0
mov bx,0

# 先進後出,先出棧的是 bx, 後出棧的是 ax
pop bx
pop ax

問題 3.9

程式設計
將 10000H ~ 1000FH 儲存空間當作棧,初始為空
設定 AX=002AH, BX=002BH
利用棧,交換 AX,BX中的資料

mov ax,1000H
mov ss,ax
mov sp,0010H

mov ax,002a
mov bx,002b

push ax
push bx

pop ax
pop bx

問題 3.10

如果要在 10000H 處 寫入字型資料 2266H, 可以用下的程式碼

mov ax,1000H
mov ds,ax
mov ax,2266H
mov [0],ax

補全下面的程式碼,使它完成同樣的功能,在 10000H處寫入字型資料 2266H. 要求不使用 mov 記憶體單元,暫存器

mov ax,1000H
mov ds,ax
mov sp,0002H

mov ax,2266H
# 使用棧,SP-1 [1000:1]->22H  SP-1 [1000:0]->66H , SP最終為 0000H
push ax

相關文章