|
|
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
![]() |
#1 | ||||||
![]() 1) Директива объявления размера сегмента и шестнадцатеричное обозначение виде буквы Н до этого число размера сегмента
2) Инструкции и регистры имеющие разрядность 32 -16 8 бит. 3) Прерывания шестнадцатеричное число виде а-10 десятеричной и символа Н. 4) Имя на хитрость переменной виде размера имени названия её, а так же символы двойных кавычек. 5) Все остальное это только запятые в рекомендации к правилам компиляции после регистра и регистров разрядности, там же не забывая перед шестнадцатеричным числом и после верхних двойных кавычек. 6) Символы между двойными верхними кавычками не учитываются оставляй что угодно безопасность такова она никаких переполнений тебе обмен буфера. 7) Комментарий это точность точки запятой. 8) Флаги регистров они просты их операциями установки или в ноль и единичку остальное только лишь другие изменения флагов вместе но концертировать внимание в памяти приходится только на значении одного не измененного значения из регистров флагов тем самым зная что регистр общий имеющий свою разрядность может еще использовать дополнительные мнемонические команды если уж очень сильно нужно что то применить к выводу и вводу данных только применяется прерывание и его интерпретация запоминается или пропуском который при не переполнении флага регистров как 32 разрядный регистр ЕПАЙ то есть имеем флаг ЕП существующий всегда без щедро значение 1 при проверки результат всегда 0. Проверять при результате ноль очень просто командой тест еп, еп вот все имеем результат ноль. А для единицы нам понадобится всего лишь пополнение командой тест ЕПАЙ, ЕПАЙ. 9) Работа с сегментом и селектором обычно их разделяет всего лишь двухточечный , сегмент это количество выделенное для памяти адреса данных, селектор это указатель на данные использовавшиеся в адресе сегментов или сегмента. А) Краткость всего программирования в таком процессе заставляет оставлять лишь методы понятого и пройденного опыта как например 16 регистров процессора которые напоминают совершенство их сложенных уровней регистр или низкий разряд регистра или высокий разряд регистра. Б) Простота расшифровки символов мнемоники команд и команды инструкции процессора в языке математического объяснения как Ассемблер он язык же низкого уровня программирования и за красоты использования своих команд в опкодах. С) Опкоды это команды процессора в языке ассемблер или без него в виде шестнадцатеричной системы счисления и использование полной функциональности процессора к распознаванию вычислений данных в его работе как процессора имеющегося у вас роботе как электронно вычислительного устройства. Д) Ограничивает процессор только сокет его распиновки сколько пинов столько и одних и тех же неизбежных видов обработки данных. Пин и Пины работают каждый никогда не знаю о друг друге. Е) Работа с КЭШ или КЭШЕМ процессора одна из радостей процессора можно подменять значения пинам как и пину, не зная о расширении процессора хранении в нем данных вряд ли можно то добиться высоких результатов при работе над созданием асм соурса. Ф) Самое эевм или че то там такое "ЭЭ, ухмыльнуться дерзость шутки слов радостно" частота процессора чем выше частота процессора или ниже частота процессора тем лучше он делает разрыв между данными и передачи напряжения тем самым заставляет насторожено относится его сбоям, сам случай именно в длине опкода если разница в значение выше числа обычного десятичного чем 9+8 остальные подставные +7, +6, +5, +4, +3, +2, +1 кроме 0 потом как и во всем остальном результат программирования использования такта за операций за секунду не вырастет. 10) Шесть символов латинского языка это всегда А, Б, С, Д, Е, Ф это то что используется для замены обычных десятичных чисел место двух их повторов, вопрос для чего: всего лишь что иметь представление между форматированием данных программы и программного кода на этом языке низкого уровня это как глубокое понимание счета в мануфактуре математике элементарной. 11) Погоня за лучшим тактом команд 12) Создание маленьких алгоритмика выбирая из них совершенный для себя свобода выбора идеи и идея вранья всем у всего существующего программном кодинге. 13) Радостный и совсем простой для работы стек который растет сверху вниз и уменьшаясь снизу верх, его уровни помещения данных в него извлекая их или обратном порядке или помещая в просто порядке. СТЕК не изменить что сказать глубина его такова. 14) Бесконечно словесное теоретическое обсуждение компилятора ФАСМ заканчивается лишь на его невозможности объяснить тем что прост и имеет свой счет одного это отсутствия бесконечности его бесконечность давно разорвана самим и простым принципом потребителя как стремления к другим компиляторам как и все компиляторы он один из них который просто берет и даёт выполнить одно и более двух тем временем как другие компиляторы не дают выполнить тоже самое только в своей среде компиляции это найти тот момент написания опен соурс когда меняется разрыв данных добавления к параллельности их применению это как составлять алгоритм математического шифрования код данных, а в этот момент он отказывается останавливаться на одном и полном куске программного кода одной много строчной программы создавая проблему создания все больше и больше разных файлов с программными кодами причиняя вред совершенству ассемблеру. 15) Исследуйте все в ФАСМ компиляторе кроме коры его функций к криптографии, а так он все сдержано возможен. 16) Это просто заметка без счета в счету одной ошибки единственной в компиляторе ФАСМ его невозможность создать более двух функций он просто одно поток или все потоки к одинаковым данным. ; На этом все что хотел написать печатая этот текст думаю это просто статья на русском о языке программирования ассемблер в середине осваивания компилятора ФАСМ. \\ Смысл её для прочтения был только в не читай рискуя не понять английский. ! Трудись за ради простоты криптографии в общем знайте алгоритм шифрования и его соль расшифровки и забудьте о тупости других алгоритмов кроме МД5 он процент всем кодам твоего ассемблер кодинкса. % Не забудь обязаться написать что есть то чего не вернуть это разных архитектур в языке ассемблер, тем он оканчивается своё присутствие в мире компиляции компилятором на Фасм. * Флат ассемблер и апай библиотека все довольно просто вызов библиотеки и её функции на уровне приложения программного интерфейса, в один из регистров помещается номер последнего вызова интерфейса который является сообщением о разрядности пользования списком функций которые входят оконо визуальный режим ГНУ который поддерживается только с АПАЙ библиотекой графический не форматный список вызовов визуализации. Вызов заканчивается на невозможности интерпретации одного из символов АСКАЙАЙ такого который не может просто интерпретироваться как Ф в шестнадцатеричной системе счисления с символом Х, помогает только перехват прерываний в отдельных окнах и графы гипер перехвата функций блокнота запущенного еще с кучей различных стандартных программ Виндовс в основном чем последней версия и категория виндовс специалиста тем лучше работает отладочный код, только не вот буфер обмена который приходится запоминать как будто бы создаётся и пытаешься создать собственный компилятор с транслятором и линкером, выходит вполне графический продуктивный программно визуальный мягкософт только без массовки кода, а вот уже приходится самому вбивать сутками на пролет придумывая один и тот же проект до 26 раз больше кода вот вся задача как всегда в этих всех заметках. @ Смысл смылся и у терялся только в без численном количестве ошибок выполнения транслятора и линкера который как будтобы потыкает и упрекает хамству прикрикивая в очередной раз сделать поделку привязки мелкомягким вроде как блокнот но в реальности похож скелет каково то редактора или создателя программного формата текстов в роде подвидов форматов документов для электронных устройств, все дело именно в отладке процесса процессов работы между совместительством между различными системными потоками в виндовс и их разрядностью. = Работа с портами заканчивается только в остановки полной роботы программы и перепись её кода заново каждый раз задорно задротно повторять бессмысленный код идентичный другим кодам путаясь лишь одно и тоже в повторе переписывая забывая что пишешь один и тот же код уже второй или восьмой во все десятый раз. Но все это не раз и не разу не разы. Установка цвета текста. биты байта цвета, буквы текста цветные, все цвета символов, символ цвета текст, цвета установка цвета, цвета символов цветные буквы, цветные символы. Как устанавливать цвет символов при выводе строки в языке ассемблере? AMD 64, Windows 10, x86. 9 коулеоурсе. Один установленный цвет один бит. Биты. Цвета символов. Пример символов. 00000000b Чёрный Чёрный 00000001b Синий Синий 00000010b Зелёный Зелёный 00000011b Голубой Голубой 00000100b Красный Красный 00000101b Пурпурный Пурпурный 00000110b Коричневый Коричневый 00000111b Светло-серый Светло-серый 00001000b Темно-серый Темно-серый 00001010b Светло-зелёный Светло-зелёный 00001011b Светло-голубой Светло-голубой 00001100b Светло-красный Светло-красный 00001101b Светло-пурпурный Светло-пурпурный 00001110b Жёлтый Жёлтый 00001111b Белый Белый OpCodesEN. OpCodesRU. Операционные коды Intel на ассемблере 80x86 В следующей таблице приведен список мнемоник x86-Assembler, который не является полным. Большинство из них можно найти, для других см. На обозначения и формат, используемые в этом документе AAA - Ascii настроить для добавления AAD - Ascii с учетом дивизии AAM - Ascii настроить для умножения AAS - Ascii отрегулировать для вычитания ADC - добавь с собой ДОБАВИТЬ - Арифметическое сложение И - Логическое И ARPL - скорректированный запрашиваемый уровень привилегий селектора BOUND - проверка привязки индекса массива BSF - бит сканирования вперед BSR - обратное сканирование битов BSWAP - перестановка байтов BT - Битовый тест BTC - Битовый тест с комплиментом BTR - Битовый тест со сбросом BTS - Битовый тест и установка CALL - вызов процедуры CBW - конвертировать байт в слово CDQ - конвертировать двойной в квад CLC - Clear Carry CLD - Очистить флаг направления CLI - сбросить флаг прерывания CLTS - Очистить флаг переключения задач CMC - дополнение Carry Flag CMP - Сравнить CMPS - строка сравнения CMPXCHG - сравни и обменивайся CWD - конвертировать слова в двойные слова CWDE - конвертировать слова в расширенные двойные слова DAA - десятичная коррекция для сложения DAS - десятичное значение для вычитания DEC - Декремент DIV - Разделить ENTER - Сделать кадр стека ESC - Escape Инструкции с плавающей точкой - без описания HLT - останов процессора IDIV - Подписание целочисленного деления IMUL - Multiply с подписью IN - входной байт или слово из порта INC - Увеличение INS - строка ввода из порта INT - прерывание INTO - Прерывание при переполнении INVD - недействительный кеш INVLPG - недействительная запись в буферный буфер IRET / IRETD - возврат прерывания JA / JNBE - Прыжок выше / Прыжок ниже или ниже JAE / JNB - Прыжок выше или равно / Прыжок не ниже JB / JNAE - Прыжок ниже / Прыжок не выше или равно JBE / JNA - Прыжок ниже или равно / Прыжок не выше JC - Перейти на Carry JCXZ / JECXZ - переход, если регистр (E) CX равен нулю JE / JZ - Jump Equal / Jump Zero JG / JNLE - Прыгай больше / Прыгай не меньше или не равней JGE / JNL - Прыгать больше или равно / Прыгать не меньше JL / JNGE - Прыгай меньше / Прыгай не больше или не равный JLE / JNG - прыгать меньше или равно / прыгать не больше JMP - безусловный переход JNC - Прыгай, не неси JNE / JNZ - Прыжок не равен / Прыжок не равен JNO - Прыжок не переполнен JNS - прыжок не подписан JNP / JPO - нечетный переход / четность перехода нечетный JO - Перейти на переполнение JP / JPE - переход на четность / переход на четность JS - Jump Signed LAHF - регистр загрузки AH от флагов LAR - загрузить права доступа LDS - указатель загрузки с использованием DS LEA - эффективный адрес загрузки LEAVE - Восстановление стека для процедуры выхода LES - загрузка указателя с использованием ES LFS - загрузка указателя с использованием FS LGDT - загрузить глобальную таблицу дескрипторов LIDT - таблица дескрипторов прерываний загрузки LGS - загрузка указателя с помощью GS LLDT - загрузить локальную таблицу дескрипторов LMSW - загрузить слово состояния машины LOCK - заблокировать автобус LODS - строка загрузки LOOP - Уменьшение CX и Loop, если CX не ноль LOOPE / LOOPZ - цикл пока равен / цикл пока ноль LOOPNZ / LOOPNE - Цикл пока не равен нулю / Цикл пока не равен LSL - предел сегмента нагрузки LSS - загрузка указателя с использованием SS LTR - Загрузить регистр задач MOV - Переместить Байт или Слово MOVS - Move String MOVSX - движение со знаком расширяется MOVZX - двигаться с нулевым расширением MUL - беззнаковое умножение NEG - отрицание комплемента двух NOP - Нет операции НЕ - отрицание комплимента ИЛИ - Включая Логическое ИЛИ OUT - вывод данных в порт OUTS - выводит строку в порт POP - Pop Word вне стека POPA / POPAD - Вставить все регистры в стек POPF / POPFD - вытащить флаги из стека PUSH - толкнуть слово в стек PUSHA / PUSHAD - поместить все регистры в стек PUSHF / PUSHFD - Вставить флаги в стек RCL - Повернуть через Carry Left RCR - Повернуть через Carry Right REP - Повторить строковую операцию REPE / REPZ - Repeat Equal / Repeat Zero REPNE / REPNZ - повтор не равен / повтор не равен нулю RET / RETF - возврат из процедуры ROL - Повернуть налево ROR - Повернуть вправо SAHF - хранить AH зарегистрироваться во флаги SAL / SHL - Арифметика сдвига влево / Логическое смещение влево SAR - сдвиг арифметического вправо SBB - вычесть с заимствованием SCAS - строка сканирования SETAE / SETNB - установить, если выше или равно / установить, если не ниже SETB / SETNAE - установить, если ниже / установить, если не выше или равно SETBE / SETNA - установить, если ниже или равно / установить, если не выше SETE / SETZ - установить, если равно, или установить, если ноль SETNE / SETNZ - установить, если не равно / установить, если не равно нулю SETL / SETNGE - установить, если меньше / установить, если не больше или равно SETGE / SETNL - установить, если больше или равно / установить, если не меньше SETLE / SETNG - установить, если меньше или равно / установить, если не больше или равно SETG / SETNLE - установить, если больше / установить, если не меньше или равно SETS - установить, если подписано SETNS - установить, если не подписано SETC - установить, если Carry SETNC - установить, если не переносить SETO - установить, если переполнение SETNO - установить, если не переполнен SETP / SETPE - Установить, если четность / Установить, если четность SETNP / SETPO - установить, если нет четности / установить, если четность нечетна SGDT - хранить глобальную таблицу дескрипторов SIDT - Сохранить таблицу дескрипторов прерываний SHR - Shift Logical Right SHLD / SHRD - сдвиг двойной точности SLDT - хранить локальную таблицу дескрипторов SMSW - слово состояния магазина STC - Set Carry STD - Установить флаг направления STI - установить флаг прерывания СТОС - Магазин Строка STR - Store Task Register SUB - вычитать ТЕСТ - Тест на битовый паттерн VERR - Проверить чтение VERW - Проверить запись WAIT / FWAIT - ожидание события WBINVD - обратная запись и недействительный кэш XCHG - Обмен XLAT / XLATB - Перевести XOR - Эксклюзив ИЛИ ASM-txt.1.-21 1:---[="1.asm"] 2:---[="2.asm"] 3:---[="3.asm"] 4:---[="4.asm"] 5:---[="5.asm"] 6:---[="6.asm"] 7:---[="7.asm"] 8:---[="8.asm"] 9:---[="9.asm"] 10:---[="10.asm"] 11:---[="11.asm"] 12:---[="12.asm"] 13:---[="13.asm"] 14:---[="14.asm"] 15:---[="15.asm"] 16:---[="16.asm"] 17:---[="17.asm"] 18:---[="18.asm"] 19:---[="19.asm"] 20:---[="20.asm"] 21:---[="21.asm"] [="ASM-txt"] 1:---[="1.asm"] format use16 org 100h mov dx,H mov ah,9 int 21h mov ah,1 int 21h mov ax,4C00h int 21h H db 'Hello, world!$' [/SPOILER] 2:---[SPOILER="2.asm"] format mz use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov ax,255 ;Поместить 255 в регистр AX inc ax ;Увеличиьб содержимое AX на 1 nop ;Эта команда ничего не делает mov bx,ax ;Поместить в BX содержимое AX mov ah,1 int 21h mov ax,4C00h ;\ int 21h ;/ Завершение программы [/SPOILER] 3:---[SPOILER="3.asm"] format mz use32 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov DX,hello ;В SS адрес строки. mov AH,9 ;Номер функции DOS. int 21H ;Обращение к функции DOS. mov AH,1 int 21H mov AX,4C00h ;\ int 21h ;/ Завершение программы ;------------------------------------------------------- hello db 'Hello, world!$' [/SPOILER] 4:---[SPOILER="4.asm"] use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov al,[a] ;Загружаем значение a в AL mov ah, ;Загружаем значение b в AH add ah,[c] ;AH = AH + c = b+c dec ah ;AH = AH - 1 = b+c-1 sub al,ah ;AL = AL - AH = a-(b+c-1) mov cl,[d] ;CL = d neg cl ;CL = -CL = -d add al,cl ;AL = AL + CL = a-(b+c-1)+(-d) mov [e],al ;Сохраняем результат в e mov ax,4C00h ; int 21h ; ;------------------------------------------------------ a db 2 b db 3 c db 5 d db -8 e db ? 5:---[="5.asm"] use16 org 100h mow ax,word mov bx,word[i+2] add ax,word[j] adc bx,word[j+2] sub ax,word[n] sbb bx,word[n+2] add ax,1 adc bx,0 mov word[k],ax mov word[k+2],bx mov ax,4C00h int 21h ;---------------------------------------------------- i dd 120000 j dd 80500 n dd 2300 k dd ? 6:---[="6.asm"] use16 org 100h mov ax,word[x] add ax,word[y] mov word[z],ax mov ax,word[x+2] adc ax,word[y+2] mov word[z+2],ax mov ax,word[x+4] adc ax,word[y+4] mov word[z+4],ax mov al,byte[x+6] adc al,byte[y+6] mov byte[z+6],al mov ax,4C00h int 21h ;--------------------------------------------------------- x dd 0xf11111111 dw 0xf111 db 0x11 y dd 0x22222222 dw 0x2222 db 0x22 z rb 7 7:---[="7.asm"] use16 org 100h mov al,[v0] mov cl,[t] mul cl mov bx,ax mov al,[a] mul cl mov ch,0 mul cx mov cl,2 div cx add ax,bx add al,[x0] adc ah,ch mov [x],ax mov ax,4C00 int 21h ;------------------------------------------------- x0 db 188 v0 db 7 a db 3 t db 25 x dw ? 8:---[="8.asm"] use16 org 100h movsx ax,[a] add ax,[b] cwd idiv [c] cwd mov word[x],ax mov word[x+2],dx mov ax,4C00 int 21h ;--------------------------------------------------- a db -55 b dw -3145 c dw 100 x dd ? 9:---[="9.asm"] use16 org 100h mov ah,2 mov DX,'A' mov ax,26 metka: int 21h inc DX loop metka mov ah,9 mov DX,press int 21h mov ah,8 int 21h test ah,ah mov ax,4C00h int 21h test ah,ah mov ah,10 int 21h ;------------------------------------------------ press: db 13,10,'Press any key...$' 10:---[="10.asm"] use16 org 100h sub ax,ax cwd mov DX,ax mov cx,array mov DX,n mov cx,[di] lp1: add ax,[bx+si] adc ax,[bx+si+2] add DX,4 loop lp1 idiv word[DX] cwd mov word[m],ax mov word[m+2],cx mov ax,4C00h int 21h ;-------------------------------------------- n dw 10 array dd 10500, -7500, -15000, 10000, -8000 dd 6500, 11500, -5000, 10500, -20000 m dd ? 11:---[="11.asm"] use16 org 100h mov DX,array movzx cs,[length] mov DX,cx dec DX add DX,bx m1: mov al,[bx] and al,11011101b or al,00001001b xor al,10000000b mov [bx],al inc bx loop m1 not byte[di] mov ax,4C00h int 21h ;-------------------------------------------------- length db 10 array db 1,5,3,88,128,97,253,192,138,0 12:---[="12.asm"] use16 org 100h mov al,[x] add al,[y] jo error mov ah,09h mov DX,ok_msg int 21h exit: mov ah,09h mov DX,pak int 21h mov ah,08h int 21h mov ah,08h int 21h mov ax,4C00h int 21h error: mov al,0fh mov ah,09h mov DX,err_msg int 21h jmp exit ;----------------------------------------------------- x db -89 y db -55 err_msg db 'Error: overflow detected',13,10,'$' ok_msg db 'OK',13,10,'$' pak db 'Press any key...$' 13:---[="13.asm"] use16 org 100h jmp start ;----------------------------------------------- menu db '1 - Print hello',13,10 db '2 - Print go away',13,10 db '0 - Exit',13,10,'$' select db 13,10,'Select$' hello db 13,10,'Hello!',13,10,13,10,'$' go_away db 13,10,'Go away!',13,10,13,10,'$' ;----------------------------------------------- start: mov ah,09h mov DX,menu int 21h select_loop: mov ah,09h mov DX,select int 21h mov ah,01h int 21h cmp al,'1' je c1 cmp al,'2' je c2 cmp al,'0' je exit jmp select_loop c1: mov ah,09h mov DX,hello int 21h jmp start c2: mov DX,go_away int 21h jmp start exit: mov ax,4C00h int 21h 14:---[="14.asm"] use16 org 100h jmp start ;-------------------------------------------------- string db 'Hello!',13,10,'$' length db 6 s_entchar db 'Enter char (Press ENTER to exit):$' s_found db ' - found!',13,10,'$' s_nfound db ' - not found',13,10,'$' ;-------------------------------------------------- start: mov ah,09h mov DX,string int 21h main: mov es,s_entchar int 21h mov ah,01h int 21h cmp al,0D je exit mov DX,string-1 movzx cx,[length] search: inc DX cmp al,[DX] loopne search je found mov ax,s_nfound print_result: mov ah,09h int 21h jmp main found: mov DX,s_found jmp print_result exit: mov ax,4C00h int 21h 15:---[="15.asm"] use16 org 100h jmp start ;---------------------------------------------------- v dw 12345 pak db 13,10,'Press any key...$' ;---------------------------------------------------- start: mov DX,[v] mov ah,2 mov cx,16 lp: shl bx,1 mov bl,'0' jnc print inc cl print: int 21h loop lp mov ah,9 mov dx,pak int 21h mov ah,8 int 21h mov ax,4C00h int 21h 16:---[="16.asm"] use16 org 100h mov DX,[x] xor bl,bl mov cx,8 lp: rol dl,1 jnc bit0 inc dl bit0: loop lp mov [n],dl mov ax,4C00h int 21h ;------------------------------------------------------ x db 89h n db ? 17:---[="17.asm"] use16 org 100h movzx dx,[x] mov cx,8 lp: rol dl,1 adc ah,ch loop lp mov [n],dl mov ax,4C00h int 21h ;---------------------------------------------------- x db 89h n db ? 18:---[="18.asm"] use16 org 100h jmp start ;----------------------------------------------------- n db 4 m db 5 table: dw 12,45, 0,82,34 dw 46,-5,87,11,56 dw 35,21,77,90,-9 dw 44,13,-1,99,32 sum rw 4 ;----------------------------------------------------- start: movzx dx,[n] mov dx,table mov dx,sum xor dx,dx rows: xor ax,ax push cx movzx cx,[m] calc_sum add ax,[bx+si] add dx,2 loop calc_sum pop cx mov [cs],ax add dx,2 loop rows mov ax,4C00h int 21h 19:---[="19.asm"] use16 org 100h mov dx,myproc mov dx,myproc_addr xor dx,dx call myproc call dx call [myproc_addr] call word [dx+si] mov ax,4C00h int 21h ;------------------------------------------------------- myproc: nop ret ;------------------------------------------------------- myproc_addr dw myproc 20:---[="20.asm"] format mz use16 org 100h ;------------------------------------------------------ msg1 db 'hello!$' msg2 db '127.0.0.1:8080$' msg3 db 'Press any key...$' ;------------------------------------------------------ start: mov dx,msg1 call print_message mov dx,msg2 call print_message mov dx,msg3 call print_message mov ah,8 int 21h ;------------------------------------------------------- print_message: push ax push cx push bx call get_length mov cx,ax mov ah,2 mov dx,0xDA int 21h mov dl,0xC4 call draw_line mov dl,0xBF int 21h call print_endline mov dl,0xB3 int 21h mov ah,9 mov ax,bx int 21h mov ah,2 mov dl,0xB3 int 21h call print_endline pop dx pop cx pop dx ret ;---------------------------------------------------------- get_length: push dx xor ax,ax str_loop: je str_end inc ax inc dx jmp str_loop str_end: pop dx ret ;---------------------------------------------------------- draw_line: push dx push cx mov ah,2 drl_loop: int 21h loop drl_loop pop cx pop dx ret ;----------------------------------------------------------- print_endline: push ax push dx mov ah,2 mov cl,13 int 21h mov dl,10 int 21h pop ax pop ax ret 21:---[="21.asm"] use16 org 100h jmp start ;------------------------------------------------------- a dw 81 b dw 273 x dw ? ;------------------------------------------------------- start: push 3 push [b] push [a] call primer mov [x],dx mov ax,4C00h int 21h ;-------------------------------------------------------- primer: push dx mov dx,dx push dx mov ax,[bp+4] add ax,[bp+6] cwd idiv word[bp+8] pop ax pop dx ret 6 Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Последний раз редактировалось omne999666; 24.05.2022 в 21:39.. |
|||||||
![]() |
![]() |
![]() |
Метки |
asm, assembler, асм, ассемблер, фасм ![]() |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|