看板 ASM 關於我們 聯絡資訊
小弟我是新手, 目前正在看大陸 王爽 的 "彙編語言" 裡面有一題習題, 我做了以後有點疑義 來這邊請教各位大大 題目如下 下面的程序實現依次用內存 0:0 ~ 0:15 單元中的內容改寫程序中的數據, 數據 的傳送用棧來進行. 棧空間設置在程序內.完成程序: (註: 下面的程序目的依次是用 memory 裡面 0:0 ~ 0:15 依次改寫程序中 0123H ~ 0987H 這段, 利用 stack 來搬移資料, 以下三個 __ 是需要填上指令的部分) assume cs:codesg codesg segment dw 0123H, 0456H, 0789H, 0abcH, 0defh, 0fedh, 0cbah, 0987H dw 0, 0, 0, 0, 0 ; 五個 word 作為棧空間 (stack) start: mov ax, ___ mov ss, ax mov sp, ___ mov ax, 0 mov ds, ax mov bx, 0 mov cx, 8 s: push [bx] ___________ add bx, 2 loop s mov ax, 4c00h int 21h codesg ends end start 我的做法如下: (打 * 是我加上的部分) assume cs:codesg codesg segment dw 0123H, 0456H, 0789H, 0abcH, 0defh, 0fedh, 0cbah, 0987H dw 0, 0, 0, 0, 0 start: mov ax, cs ; ** mov ss, ax ; (1) mov sp, 1Ah ; ** mov ax, 0 ; mov ds, ax mov bx, 0 mov cx, 8 s: push [bx] pop cs:[bx] ; ** (2) add bx, 2 loop s mov ax, 4c00h int 21h codesg ends end start 我是在 windows xp 下用 masm 5.0 , 並且用 debug 來看執行結果 以下有幾個問題: 1. 為什麼 stack 需要有 5 個 word, 在程式裡面每一次 loop push 完就 pop 理論上只要一個 word 就可以才是 2. 在程式的一開始, 記憶體 cs:10 ~ cs:19 都是 0, 可是執行到 mov ss, ax (1)處 , cs:10 ~ cs:19 就會變 dirty, 即使 sp 依然是 001A 3. 在程式的執行過程中, 第一次執行 pop cs:[bx] (2)處 時, 會把剛剛的最後一筆資 料 0987H 蓋掉, 變成 0000H (這樣不就表示安全性出了問題??) 除此之外這個程式碼可以達到題目的要求 不過剛剛有問題的那幾點, 百思不得其解 感謝各位大大 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.243.43
operationcow:如果有人覺得我題目或問題說的不夠清楚, 我會補充@@ 05/20 21:08
zha0:可以問那一個學校的嗎 XD 05/21 09:41
Kniveschou:112阿 IP有寫 05/23 15:16