2012年2月11日 星期六

gas 定址基本語法


不算熟悉, gas 語法, 寫一篇記下來, 可能會有一些錯誤。
L8 - L10: 將 0x42 寫入記憶體 0000:0000 的位址。

L12: 將 0000:0000 的 1 byte 複製到 %al
L14: 寫入 b800:0000
L19: 寫入 b800:0002, 透過將 %edi 設為 2
L21, L26: 測試 $BootMessage 和BootMessage 的用法。
L22: 1(%bx) 為 gnu AT&T 定址語法。

boot_practice.S
 1 .code16
 2 .text
 3     mov     %cs,%ax
 4     mov     %ax,%ds
 5     mov     %ax,%es
 6     mov $0xB800, %ax
 7     mov %ax, %gs
 8     mov $0x0, %ax
 9     mov %ax, %es
10     movb $0x42, %es:0 
       # move immediate value (0x42 = 'B') to address 0000:0000, es -> 0
11
12     movb %es:0, %al
13     mov $0x0c, %ah # red color
14     mov %ax, %gs:(0)
15
16     mov $2, %edi
17
18     mov $0x41, %al
19     mov %ax, %gs:(%edi)
20
21     mov $BootMessage, %bx
22     movb %ds:1(%bx), %al
23     movb 1(%bx), %al
24     mov %ax, %gs:(4)
25
26     movb BootMessage, %al
27     mov %ax, %gs:(6)
28
29     jmp     .
30 DispStr:
31     mov     $BootMessage, %ax
32     mov     %ax,%bp
33     mov     $16,%cx
34     mov     $0x1301,%ax
35     mov     $0x00c,%bx
36     mov     $0,%dl
37     int     $0x10
38     ret
39 BootMessage:.ascii "Hello, OS world!"
40
41 .org 510
42 .word 0xaa55
43 


沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。