поставил начал компилить, и увидел ошибки O_O
что в nasm что в fasm
код не компилится
поставил на Досбокс tasm (от Борланда, рекомендованный компилер)
он эту прогу собрал
мне в принципе все равно я могу и под досбоксом писать, но хочется докапаться до истины
Код:
; Prg_6_l.asm '•
;Программа преобразования двузначного шестнадцатеричного числа
;в символьном виде в двоичное представление.
;Вход: исходное шестнадцатеричное число из двух цифр,
;вводится с клавиатуры.
;Выход: результат преобразования помещается в регистр dl.
data segment para public "data" ;сегмент данных
message db "Введите две шестнадцатеричные цифры,$"
data ends
stk segment stack
db 256 dup ("?") ;сегмент стека
stk ends
code segment para public "code" ;начало сегмента кода
main proc ;начало процедуры main
assume cs:code,ds:data,ss:stk
mov ax,data ;адрес сегмента данных в регис
;продол
mov ds,ax ;ax в ds
mov ah,9
mov dx,offset message
int 21h
xor ax ,ax ;очистить регистр ах
mov ah, 1h ;Ih в регистр ah
int 21h ;генерация прерывания с номером 21h
mov dl,al ;содержимое регистра al в регистр dl
sub dl,30h ;вычитание: (dl)=(dl)-30h
cmp dl,9h ;сравнить (dl) с 9h
jle Ml ;перейти на метку Ml, если dl<9h или dl=9h
sub dl, 7h ;вычитание: (dl)=(dl)—7h
Ml: ;определение метки Ml
mov cl,4h ;пересылка 4h в регистр cl
shl dl,cl ;сдвиг содержимого dl.Ha 4 разряда влево
int 21h ;вызов прерывания с номером 21h
sub al,30h ;вычитание: (dl)=(dl)—30h
cmp al,9h ;сравнить (al) с 9h
jle M2 ;перейти на метку М2, если al<9h или al=9h
sub al ,7h ;вычитание: (al)=(al)-7h
M2: ;определение метки М2
add dl,al ;сложение: (dl)=(dl)+(al)
mov ax,4c00h ;пересылка 4c00h в регистр ах
int 21h ;вызов прерывания с номером 21п
main endp ;конец процедуры m a i n
code ends ;конец сегмента кода
end main ;конец программы с-точкой входа main
Код: Выделить всё
[dudraug@localhost fasm]$ ./fasm ~/dos/r/new.asm
flat assembler version 1.67.22 (16384 kilobytes memory)
/home/dudraug/dos/r/new.asm [7]:
data segment para public "data" ;сегмент данных
error: illegal instruction.Этот пример взят из книге по асму
в примерах что нам препод дал ( электорном виде) синтаксис(или оформление?) отличается
например
Код:
.model small
.386
.stack 100h
.data
N120 dw 120
N20 dw 20
N6 dw 6
N64 dw 256
F1_5 dd 1.5
FramesCount dd 0
TimerCount dd 0
StartTimerCount equ 1
EndTimerCount equ 1001
msg_frames_count db "Processed frames: ",0
msg_eol db 13,10,0
texture db 4096 dup (?)
dxyfxy dq 240 dup (?)
xytmp dd ?
N dw ?
text_buf db 40 dup (?)
old_vector_1ch dd ?
.code
main proc
cld
xor bx, bx
mov cl, byte ptr ds:[80h]
xor ch, ch
jcxz mainTP30
mov si, 81h
mainTP10:
cmp byte ptr ds:[si], '!'
jne short mainTP20
inc bx
mainTP20:
inc si
loop mainTP10
mainTP30:
mov ax, @data
mov ds, ax
mov es, ax
push bx
call PreCalculate
call GenerateTexture
call SetGraph
mov N, 0
pop bx
and bx, bx
jz mainD00
; stress mode
mainS00:
call Install1ch
mainS1v:
hlt
cmp TimerCount, StartTimerCount
jne mainS1v
mainS10:
call ShowTexture2
inc FramesCount
inc N
cmp N, 240
jne mainS20
mov N, 0
mainS20:
cmp TimerCount, EndTimerCount
jl mainS10
call Deinstall1ch
jmp mainF00
; end of stress mode
; demo mode
mainD00:
mainD10:
call VWait
call ShowTexture2
inc FramesCount
inc N
cmp N, 240
jne mainD20
mov N, 0
mainD20:
in al, 60h
cmp al, 1ch
jne mainD10
; end of demo mode
mainF00:
call SetText
mov eax, FramesCount
lea di, text_buf
call Long2Text
lea si, msg_frames_count
call PrintString
lea si, text_buf
call PrintString
lea si, msg_eol
call PrintString
mov ax, 4c00h
int 21h
main endp
VWait proc
mov dx, 03dah
vw1: in al, dx
test al, 8
jnz vw1
vw2: in al, dx
test al, 8
jz vw2
ret
VWait endp
GenerateTexture proc
lea di, texture
mov bx, 64
gt10:
mov cx, 64
gt20:
mov al, bl
sub al, 32
jnl gt31
neg al
gt31:
mov ah, cl
sub ah, 32
jnl gt32
neg ah
gt32:
add al, ah
add al, 32
stosb
loop gt20
dec bx
jnz gt10
ret
GenerateTexture endp
SetGraph proc
mov ax, 0013h
int 10h
ret
SetGraph endp
SetText proc
mov ax, 0003h
int 10h
ret
SetText endp
ShowTexture2 proc
push es
mov ax, 0A000h
mov es, ax
mov di, 0
mov ax, N
shl ax, 3
lea si, dxyfxy
add si, ax
mov edx, [si+4] ; EDX - YYXX
mov esi, [si] ; ESI - dYYXX
mov cx, 200
sht240:
push cx
push edx
mov cx, 320/4
sht250:
mov ebx, edx
shr ebx, 18 ; bx = y<<6
and bx, 0fc0h ; and 00001111 11000000
add bl, dh ; bx += x
mov al, byte ptr ds:[bx + offset texture]
ror eax, 8
add edx, esi
and edx, 3fff3fffh
mov ebx, edx
shr ebx, 18 ; bx = y<<6
and bx, 0fc0h ; and 00001111 11000000
add bl, dh ; bx += x
mov al, byte ptr ds:[bx + offset texture]
ror eax, 8
add edx, esi
and edx, 3fff3fffh
mov ebx, edx
shr ebx, 18 ; bx = y<<6
and bx, 0fc0h ; and 00001111 11000000
add bl, dh ; bx += x
mov al, byte ptr ds:[bx + offset texture]
ror eax, 8
add edx, esi
and edx, 3fff3fffh
mov ebx, edx
shr ebx, 18 ; bx = y<<6
and bx, 0fc0h ; and 00001111 11000000
add bl, dh ; bx += x
mov al, byte ptr ds:[bx + offset texture]
ror eax, 8
add edx, esi
and edx, 3fff3fffh
stosd
loop sht250
rol esi, 16
pop edx
add edx, esi
sub dx, si
sub dx, si
and edx, 3fff3fffh
ror esi, 16
pop cx
dec cx
jnz sht240
pop es
ret
ShowTexture2 endp
PreCalculate proc
finit
mov cx, 240
mov N, 0
lea di, dxyfxy
pc10:
; count scale
fild N
fldpi
fmulp st(1), st
fild N120
fdivp st(1), st
fsin
fild N
fldpi
fmulp st(1), st
fild N20
fdivp st(1), st
fsin
fild N6
fdivp st(1), st
fld F1_5
fadd
fadd
fild N64
fdivp st(1), st
; count alpha
fild N
fldpi
fmulp st(1), st
fild N120
fdivp st(1), st
fsin
fldpi
fmulp st(1), st
; st(0) = alpha
; st(1) = scale/64
fsincos
; st(0) = cos alpha
; st(1) = sin alpha
; st(2) = scale/64
fdiv st, st(2)
fistp word ptr xytmp
fdivrp st(1), st
fistp word ptr xytmp+2
; copy tmp to dx & dy
lea si, xytmp
movsd
; calc -160*dxh+100*dyh
mov ax, -160
imul word ptr xytmp
mov word ptr [di], ax
mov ax, 100
imul word ptr xytmp+2
add word ptr [di], ax
and word ptr[di], 3fffh
; calc -160*dyh-100*dxh
mov ax, -160
imul word ptr xytmp+2
mov word ptr [di+2], ax
mov ax, -100
imul word ptr xytmp
add word ptr [di+2], ax
and word ptr[di+2], 3fffh
add di, 4
inc N
dec cx
jz pc20
jmp pc10
pc20:
ret
PreCalculate endp
Long2Text proc
; converts eax to asciiz at es:di
;
mov ebx, 10
push bx
l2t10:
xor edx, edx
div ebx
push dx
or eax, eax
jnz l2t10
l2t20:
pop ax
cmp ax, bx
je l2t30
add al, 30h
stosb
jmp l2t20
l2t30:
xor al, al
stosb
ret
Long2Text endp
PrintString proc
; displays at stdout asciiz from ds:si
;
mov ah, 02h
ps10:
mov dl, ds:[si]
or dl, dl
jz ps20
int 21h
inc si
jmp ps10
ps20:
ret
PrintString endp
Interrupt1ch proc
push ds
push ax
mov ax, @data
mov ds, ax
inc TimerCount
pop ax
pop ds
iret
Interrupt1ch endp
Install1ch proc
push es
mov ax, 351ch
int 21h
mov word ptr old_vector_1ch, bx
mov word ptr old_vector_1ch+2, es
pop es
push ds
mov ax, 251ch
mov dx, offset Interrupt1ch
push cs
pop ds
int 21h
pop ds
ret
Install1ch endp
Deinstall1ch proc
push ds
mov ax, 251ch
mov dx, word ptr old_vector_1ch
mov ds, word ptr old_vector_1ch+2
int 21h
pop ds
ret
Deinstall1ch endp
end mainв tasm тоже компилится а в fasm нет
Код: Выделить всё
[dudraug@localhost fasm]$ ./fasm ~/dos/test.asm
flat assembler version 1.67.22 (16384 kilobytes memory)
/home/dudraug/dos/test.asm [1]:
.model small
error: illegal instruction.