24h購物| | PChome| 登入
2013-03-09 10:23:01| 人氣5,743| 回應0 | 上一篇 | 下一篇

[組合語言][作業] 第一支可以跑的程式

推薦 0 收藏 0 轉貼0 訂閱站台

—Declare: (if student ID = 995202053)
DigitA db 0
DigitB db 5
DigitC db 3
MyId dw ?
—DigitA to DigitC are initialized with the last 3 digits of your student id.
—The program is to merge the three digits into MyId.

是很無聊的要求
,但是要寫出來也不是件容易的事情。
記住顯示的時候是十六進制,因此將數字併再一起時,仍是十六進制。

例如我的學號是 100502205,就是說我要合出 MyId = 0x205

先來看看代碼吧!

記得,如果型態不同,複製的時候使用 movzx 是將型態放大一倍(8 bit->16 bit, 16 bit->32 bit),

MyId 是 16 bit(WORD), DigitABC 是 8 bit(BYTE)
AX 是 16 bit(WORD), CL 是 8 bit(BYTE)。

看一下 add 的語法指令
     add     暫存器,暫存器
add     暫存器,數字(常數)
add     暫存器,變數名
add     變數名,暫存器
add     變數名,數字
沒有 add 變數名, 變數名,因此要先將另一個變數放入暫存器。



TITLE Homework #1_100502205

INCLUDE Irvine32.inc

.data
DigitA db 2
DigitB db 0
DigitC db 5
MyId   dw ?

.code
start PROC
    mov CL, 4
    movzx ax, DigitA      ;ax(16 bit) = DigitA(8 bit)
    mov MyId, ax          ;myid = ax
    shl MyId, CL          ;myid <<= 4
    movzx ax, DigitB      ;ax = DigitB
    add MyId, ax          ;myid += ax
    shl MyId, CL          ;myid <<= 4
     movzx ax, DIgitC      ;ax = DigitC
    add MyId, ax          ;myid += ax
    ret
start ENDP
END start


現在用 windbg 圖解,來查看記憶體的狀況



































台長: Morris
人氣(5,743) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: [學習]組合語言 |
此分類下一篇:[組合語言][練習] Hello, World!
此分類上一篇:[組合語言] 初步-debug 環境 Windbg

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文