|
Heresy
#01
16 мая 1999 |
|
PC ASM - ассемблер для X86.

███████████████████▄ ▄▄█████████████████▄
█████████ ▀████████▄ ████████▀ ▀██
█████████ █████████ ███████▀
█████████ █████████ ███████ ▄▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄
█████████ ▄████████▀ ███████ ▐▄▄▄▄▄█ ▐▄▄▄▄▄▄ ▐ ▌ █
███████████████████▀ ████████ ▐ ▀ ▄▄▄▄▄▄▀ ▐ ▌ █
█████████ █████████▄
█████████ █████████▄ ▄██
█████████ а$h ▀▀█████████████████▀
В шестом Born Dead'e появилась статья о программировании на
68000, то бишь на Амиге. Не знаю, интересно ли это было кому-то,
но возникла мысль: а ПЦ ? :)
Ведь гораздо больше народу юзает вместе со Спекки именно РС.
И довольно часто возникает необходимость написания небольшой
утилитки на РС для перекидывания чего-либо для Спекки, либо
конвертирования, ну или просто fuck кому послать надо ;).
Короче, я в этом деле чайник, но что буду узнавать тем и
буду делиться ;). Я не буду начищать вам мозги насчет регистров
и команд, так как это есть в любом справочнике. А вот то, что я
в справочниках не нашел, то, что мне пришлось выискивать
Insight'om в exe'шниках или консультироваться у Dark Lion'a и
тому подобное - этим я с вами поделюсь.
───────────────────────────────────────
1. Заглушка для "клавы" - отрубает опрос клавиатуры
(включая Ctrl-Break и Ctrl-Alt-Del ;)
;глушим
in al,21h
mov [varib],al
or al,2
out 21h,al
... ;ваша программа
;и перед выходом
;восстанавливаем
mov al,[varib]
out 21h,al
varib db 0
───────────────────────────────────────
2. Печать сообщения - ну это вроде самое
простое, но вдуг кто не знает :)
mov dx,OFFSET text
mov ah,9h
int 21h
text db "Speccy was here :)",Odh,Oah,"$"
;кода Odh и Oah называются CR+LF
;(возврат каретки и перевод строки)
;они ставятся дабы следующее сообщение
;печаталось с новой строки,
;знак доллара означает конец сообщения ($=24h)
───────────────────────────────────────
3. Опрос any key
если клава отрублена процедурой 1.,
то естественно ничего у вас не получиться
no_key:
mov ah,1
int 16h
jz no_key
...
───────────────────────────────────────
4. Опрос клавиши esc
no_esc:
in al,60h
cmp al,1
jnz no_esc
...
───────────────────────────────────────
5.Выход в Дос
(можно конечно короче, но для начала сойдет)
mov ah,Чch
int 21h
───────────────────────────────────────
Небольшое разъяснение. В отличии от z80 на ПЦ принято
писать числа в
- hex-формате с "h" на конце (пример:21h), прибавляя ноль
вначале, если число начинается с буквы (пр.:Oah)
- двоичном формате добавляют "b" на конце (пр.:00001111b)
───────────────────────────────────────
Теперь из этих процедур можно попробовать
склепать вашу первую программу:
(обратите внимание - метки ставятся с двоеточием,
за исключением data-меток).
;--- Your first PC programm ;) ---
.model tiny
.code
org 100h ;com-файл начинается
;c адреса 256
start:
mov dx,OFFSET text
mov ah,9h
int 21h
no_esc:
in al,60h
cmp al,1
jnz no_esc
mov ah,Чch
int 21h
text db "Speccy was here :)",Oah,Odh,"$"
end start
;--------------------------------------------
Все это набивается в любом редакторе (очень удобен для этого
встроеный в Dos Navigator), затем списывается на диск, в файл с
расширением, к примеру, first.asm
Теперь, если у вас есть ассемблер, можно откомпилить в
com-файл. Через коммандную строку задаем:
tasmx /m2 first.asm
и получаем объектный файл first.obj, линкуем его в .com:
tlink /t /x first.obj
и лицезреем новый файл first.com - запускайте!
Знаю, что для многих все вышеперечисленное уже давным-давно
известно. Просьба к таким людям поделиться с народом своими
знаниями, наработками, полезными процедурами и т.п.
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3