ml /c /AT first.asm - команда проканала link /SUBSYSTEM:CONSOLE first.obj - ругаца.. warning LNK4033: converting object format from OMF to COFF fatal error LNK1190: invalid fixup found, type 0x0001 вот кодес: Code: ;--------------------------------- TITLE PRIMER11 ;--------------------------------- CODSEG SEGMENT ASSUME CS:CODSEG, DS:CODSEG, SS:CODSEG, ES:CODSEG ORG 100H BEGIN: JMP BEG_CODE TEXT DB 'My first program on assembler. $' BEG_CODE: MOV AX,CS MOV DS,AX LEA DX,TEXT MOV AH,9 INT 21H MOV AH,4CH INT 21H CODSEG ENDS END BEGIN
не могу понять... есть процедура на асме которая выставляет частоту микросхемы таймера. ____________________________________________ Code: SetTimeFraq Proc ARG freq:word push bp mov bp,sp mov al, 36h out 43h,al [B]jmp $+2[/B] mov ax, freq out 40h,al jmp $+2 xchg al,ah out 40h, al pop bp ret SetTimeFraq EndP ____________________________________________ Вопрос: почему для задержки при переходе к след. инструкции используется JMP $+2 (а не nop или друг.) В асме поке не силен так что сильно не ругайте)
потому что $ - адрес команды jmp, команда занимает 2 байта (short), + 2 переход на следующую команду (mov ax, freq), можно очевидно в данном случае nop также использовать
На сколько я понял все таки нужно ждать, потому что: каждый из 3-х каналов микросхемы таймера i8253 (i8254) состоит из 3-х регистров. Доступ к каждой группе регистров осуществляется через 1 порт (номера портов от 40h до 42h соответственно каналам 0-2). Порт связан с 8-битн регистром ввода/вывода. Через порт отправляется 2-байтн значение (с младш байта) которое сохраняется в 16 битн регистре. ИМХО) по ходу задержка для того чтоб в 2 этапа протолкнуть 16 битн значение через 8 битн порт. если не прав помогите понять что к чему)
nop использовать не стоит, т.к. jmp short занимает куда больше тактов процессора Ждать надо, что бы успела обработать аппаратура. Только не надо спрашивать конкретнее - что куда там обработать, как микросхема пашет и пр. - я хз.
ребят, у меня мандрива линукс 2007. скажите пожалуйста что нужно установить и сделать, чтобы скомпилить самую примитивную прогу на ассемблере? чтоб проще неё уже ниче придумать нельзя было. какие пакеты нужны? редактор? (вима хватит?) исходный код (в его содержимом после разберусь) как компильнуть и запустить?
2Дикс nasm http://linux.softpedia.com/get/Programming/Compilers/NASM-The-Netwide-Assembler-643.shtml nasm manual http://nasm.sourceforge.net/doc/nasmdoc0.html
(я недавно в асме): ... компилит нормально , но при запуске пишет "точка входа в процедуру CreateFile не найдена в библиотеке Kernel32.dll" ( fasm , ps: а масме всё нормально) : format Pe GUI 4.0 entry main include 'C:\fasm\Include\win32a.inc' DO_NOT_SHARE equ 0 OPEN_EXISTING equ 3 GENERIC_WRITE = 40000000h FILE_ATTRIBUTE_NORMAL = 80h ... main: push 0 push FILE_ATTRIBUTE_NORMAL push OPEN_EXISTING push 0 push DO_NOT_SHARE push GENERIC_WRITE push filename call dword [CreateFile] ... section '.data' readable writable filename db 'log.txt',13,10,0 section '.idata' data import readable writable library kernel32,'kernel32.dll' import kernel32,\ CreateFile,'CreateFile' ...