2013-01-19 22 views
1

我試圖將as86的這個程序集轉換爲fasm。我有3個問題:將as86轉換爲fasm

1)爲什麼seg es給出了error: illegal instruction.這在16位無效?

2)是mov byte [0],0x41(FASM語法)完全等價於mov [0],#0x41(as86語法)?如果不是,你能告訴我相當於什麼嗎?

3)爲什麼entry start在FASM中給出錯誤?

這裏的組件代碼:

as86彙編

entry start 
start: 
     mov ax,#0xb800 
     mov es,ax 
     seg es 
     mov [0],#0x41 
     seg es 
     mov [1],#0x1f 
loop1: jmp loop1 

而且我寫的FASM版本:

FASM

use16 
format binary 

start: 
    mov ax,0xb800 
    mov es,ax 
    seg es 
    mov byte [0],0x41 
    seg es 
    mov byte [1],0x1f 
loop1: jmp loop1 

回答

1

正確的語法是:

mov byte [es:0],0x41 ;I'm not sure if this instruction is supported under 16 bit CPU 

push bx 
mov bx,0 ;you can use also: xor bx, bx 
mov byte [es:bx],0x41 
pop bx 
+0

這是程序集fasm的語法嗎?也不適用:'error:用作符號的保留字。' – Jack

+0

GJ:是,'mov byte [es:0],0x41'是一個有效的16位x86指令,NASM將它編碼爲'26 C6 06 00 00 41'。 – nrz

+0

我知道它是有效的16位x86指令。我在問是否是FASM sytax。 – Jack

0

seg es看起來很腥。嘗試以下操作:

mov byte ptr es:[0],0x41 
+0

不爲我的作品:'s.asm [21]: MOV字節的PTR ES:[ 0],0x41 錯誤:invalid expression.' – Jack