[問題] 新手發問 masm 的 assembly

看板ASM (組合語言)作者 (香蕉公車)時間15年前 (2009/05/20 20:54), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
小弟我是新手, 目前正在看大陸 王爽 的 "彙編語言" 裡面有一題習題, 我做了以後有點疑義 來這邊請教各位大大 題目如下 下面的程序實現依次用內存 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

05/20 21:08, , 1F
如果有人覺得我題目或問題說的不夠清楚, 我會補充@@
05/20 21:08, 1F

05/21 09:41, , 2F
可以問那一個學校的嗎 XD
05/21 09:41, 2F

05/23 15:16, , 3F
112阿 IP有寫
05/23 15:16, 3F
文章代碼(AID): #1A4_sBUh (ASM)
文章代碼(AID): #1A4_sBUh (ASM)