эта программа должна выводить содержимое файла на экран,но она не компилируется (под nasm): Код (Text): %define B_LENGTH 8 0 %define STDOUT 0x0001 SECTION .text org 0x100 mov bp,STDOUT mov ax,0x3D00 mov dx,file_name int 0x21 jc error mov bx,ax read_next: mov ax,0x3F mov dx,buffer mov cx,B_LENGTH int 0x21 jc error or ax,ax jz end_reading mov cx,ax mov ah,0x40 xchg bp,bx int 0x21 xchg bp,bx jmp read_next end_reading: mov ah,0x35 int 0x21 mov al,0 endprog: mov ah,4Ch int 0x21 error: mov al,1 jmp short endprog SECTION .data file_name db "text.txt",0 SECTION .bss buffer RESB B_LENGTH вроде где-то в первой строке,что там не так,не знаю.
777user777 1) Ошибка в первой строке "%define B_LENGTH 8 0" ноль явно лишний, подправил и у меня ЕХЕ создался, но вот будет ли он работать? 2) судя по обилию секций это ЕХЕ под ДОС но тогда зачем "org 0x100" это от СОМ-файла 3) почему нет "mov ax,@data/mov ds,ax"? Для чего "mov bp,STDOUT"?
777user777 Ну, а если это СОМ тогда зачем SECTION .text, SECTION .data, SECTION .bss? вот пример СОМ'а на nasm Код (Text): %define ONLY_NASM section .code org 0x100 start: mov ah,9 mov dx,Hello int 0x21 mov ah,0 int 0x16 ret Hello db 'Hello, world, from NASM-DOS-COM!$' warring не ошибка, а предупреждение... (не смертельно)
без этого можно,но компилятор пишет Код (Text): warning: uninitialized space declared in .text section: zeroing но всеравно программа не работает
777user777 эта программа на МАСМ выводит содержимое файла на экран, на НАСМ сам переводи Код (Text): ; masm dos com # .286 .model tiny .code org 100h start: mov ax,3D00h lea dx,file_name int 21h mov bx, ax mov ax,4202h mov cx,0 mov dx,0 int 21h mov len_file,ax mov ax,4200h int 21h mov ah,3fh mov cx,len_file lea dx, finish int 21h mov ah,3eh int 21h push 0B900h pop es lea si,finish xor di,di mov cx,len_file mov ah,31 @@: lodsb stosw loop @b mov ax,0501h int 10h xor ax,ax int 16h mov ax,0500h int 10h ret file_name db '0100.asm',0 len_file dw ? finish equ $ end start