發表文章

目前顯示的是有「Assembly Language」標籤的文章
 用gcc編譯組合語言遭遇的困難  一. --------------------------------------test.s -------------------------------- .code16 .text   ljmpl $8, $0 ---------------------------------------------------------------------------- --------------------------------------x86.ld-------------------------------------- SECTIONS {     . = 0x7c00     .text :      {          _ftext = .;     } = 0 }   ----------------------------------------------------------------------------  ---------------------------------Makefile-------------------------------------------  CC=gcc LD=ld OBJCOPY=objcopy LDFILE=x86.ld   all : test.bin   test.o : test.s     $(CC) -c test.s   test.bin : test.o     $(LD) test.o -o test.bin --oformat=binary -T$(LDFILE) ----------------------------------------------------------------------------   CMD: D:\Code\Assembly\test2>make gcc...

組合語言 Assembly Language

 組合語言 Assembly Language 1. ds=2300h , bx=0200h ,那麼執行 mov ax,[bx] 指令後就會把 2300:0200 記憶體的資料取出 2byes 並存入 ax 2. SP 是堆疊指標,當使用 push 指令時, sp 會加 2 ,而執行 pop 時 sp 會減 2 3. data. pas0 db 'ABCD' pas2 db 'EFGH'   ; 假設資料段,是如此定義了兩個變數         ; pas0 位址的內含值是 'A' , pas0+1 的內含值是 'B'        ; pas0+2 位址的內含值是 'C' , pas0+3 的內含值是 'D'    ; pas0+4 位址的內含值是 'E' 也是等於 pas2 的內含值是 'E'    ; 這個地方非常的奧秒吧,為什麼 [pas0+4]=[pas2] 的值    ; 因為 'D' 的下一位址就是 'E' 4. 置放堆疊的記憶體區塊的 位址 ,就是 SS:SP 暫存器所指的位址 (1).PUSH :將 sp 的值減 2 ,然後在將指定要放入堆疊的運算元存入 ss:[sp] (2).POP :將 ss:[sp] 的值取出,並放入所指定的運算元內,然後 sp 的值加 2 jmpi jmpi  go,INITSEG jmpi为段间跳转指令 執行這條指令之後 CS = INITSEG IP = go db 前要加jmp org 100h jmp main msg db 'hello','$' main: ;your code ret 輸入字元 ah=01h return al ex: mov ah,01h int 21h ;al = [intput char] 輸出字元 al => result status ex: mov ah,01h ...