Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Assembler задача для курсовой помогите пожалуйста.не могу найти в интернете ничего что могло бы помочь дан одномерный массив найти количество и сумму нечетных элементов https://www.cyberforum.ru/ assembler/ thread1000518.html Assembler Компиляция masm32 из RadASM программ для DOS
Доброго времени суток. Вот такая проблема у меня. Скачал masm32 установил в корень диска С: В notepad забил текст,отдаю команду в командной строке ml /c xxxx.asm получаю файл с расширением .obj Далее doslnk /t xxxx.asm и тишина "doslnk" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Это что ,получается у меня нет линковщика?! Хотя в папке bin файл...
Assembler Одна непонятная ситуация с отладчиком td Всем доброго времени суток. У меня небольшая проблема с программой. Заранее говорю, я новичок в этом. Сделал программу которая должна выводить числа на экран в диапазоне от нуля до 99999, короче говоря максимально 5-ти значные числа. Как пример должно выдать число 50784, а выдаёт мне вот такое: треугольник 6256. Но когда я запускаю эту программа через отладчик td она мне выдаёт в консоль нужное... https://www.cyberforum.ru/ assembler/ thread996648.html Assembler Правильный выход из программы https://www.cyberforum.ru/ assembler/ thread995183.html
Поправьте код код пожалуйста, чтобы программа выключалась после нажатия клавиши =) P.S. Компилятор TASM .MODEL small .DATA HelloMessage DB 'Hello, world $' .CODE mov ax,@data mov ds,ax mov ah,9 mov dx,OFFSET HelloMessage
Assembler Переписать алгоритм на ассемблер
Есть код на делфи. тема - работа с BitMap. Вопрос: можно ли реализовать это на ассемблер? Это интерполяция изображений. P.s. Важен не сам код, как файл. Вот, то, что нужно ускорить: unit rsmpl; interface uses SysUtils, Classes, Graphics;
Assembler Ошибка в коде, необходимо разобраться! https://www.cyberforum.ru/ assembler/ thread990315.html
.386 .model flat,stdcall option casemap:none WinMain proto :DWORD,:DWORD,:DWORD,:DWORD include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\shell32.inc include C:\masm32\include\kernel32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\include\shell32.inc
Assembler Tasm DosBox Доброго всем времени суток. Нужна ваша помощь: как запустить файл filename.asm в Tasm? файл размещен в d:\tasm. Tasm смонтировал с dosBox-ом: mount c: d:\tasm\bin Буду благодарен. https://www.cyberforum.ru/ assembler/ thread990002.html Assembler Удобная среда для TASM
Подскажите инструменты для комфортного изучения Ассемблер под Интел 8086 В данным момент использую DosBox и TASM, но это оочень неудобно, ведь при каждом запуске приходится настраивать, при чем при Debug'е иногда вылетает((
Assembler Команда сдвига Сразу скажу, работаю не в ассемблере, а в симуляторе микропроцессора VAX-11. Но все вполне аналогично и можно провести аналогию с ассемблером. Вопрос: Есть команда сдвига, выполняющаяся в формате long(4 байта). Число, которое я сдвигаю равно -226 в десятичной, FF1E в шестнадцатеричной. Доступ к этому числу выполняется через относительную адресация(адресация, при которой адрес операнда... https://www.cyberforum.ru/ assembler/ thread989662.html Assembler Коллоквиум, практические задания В общем, расскажу честно, учусь в универе, с этого семестра начался ассемблер, в связи с большой загруженностью не успеваю его тщательно изучать, хватаю кусками. Завтра по теории колоквиум, ребят, кому не сложно, ответьте на любой вопрос, пожалуйста, буду очень признателен. "С мира по нитке - бедному рубаха", как говорится. 50. Сегмент данных программы описан следующим образом .data str db... https://www.cyberforum.ru/ assembler/ thread989322.html
Assembler некорректное выполнение цикла
model small .stack 100h .data len equ 10 mass dw -1,0,-9,8,0,7,8,0,2,0 .code start: mov ax,@data
Assembler Как запустить Tasm в cmd на win xp? https://www.cyberforum.ru/ assembler/ thread988361.html
Как запустить Tasm в cmd на win xp?
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
15.11.2013, 04:52  [ТС] 0

Электронный учебник - Assembler - Ответ 14354666

15.11.2013, 04:52. Показов 365760. Ответов 51
Метки (Все метки)

Ответ

ГЛАВА 13
ПЕРЕХОДЫ И ЦИКЛЫ
(часть 3/5)

Команды установки байтов
Команда Проверяемые флаги Логическое условие
SETA/SETNBE CF = 0 и ZF = 0 выше
SETAE/SETNB /SETNC CF = 0 выше или равно/нет переноса
SETB/SETNAE /SETC CF = 1 ниже / перенос
SETBE/SETNA CF = 1 или ZF = 1 ниже или равно
SETE/SETZ ZF = 1 равно или ноль
SETG/SETNLE ZF = 0 или SF = OF больше
SETGE/SETNL SF = OF больше или равно
SETL/SETNGE SFhttps://www.cyberforum.ru/cgi-bin/latex.cgi?\neqOF меньше
SETLE/SETNG ZF=1 или SF https://www.cyberforum.ru/cgi-bin/latex.cgi?\neq OF меньше или равно
SETNE/SETNZ ZF = 0 не равно или не ноль
SETNO OF=0 нет переполнения
SETNP/SETPO PF = 0 нет контроля четности
SETNS SF = 0 положительное число
SETO OF = 1 переполнение
SETP/SETPE PF = 1 контроль четности
SETS SF = 1 отрицательное число
Если проверяемое условие (или содержимое соответствующих флагов на момент выдачи команды SETcc) истинно, то установить значение операнда в 1, если условие ложно – то в 0.
Применение: эти команды можно использовать после любой команды, изменяющей флаги при необходимости анализа результата изменений, а использование команд CMP или TEST по каким-то причинам невозможно. В основном используются, чтобы избежать ветвлений. Если проанализировать условия для команд условного перехода, то обнаружится их полное соответствие с условиями, обрабатываемыми командой SETcc, за исключением, конечно, команды JCXZ.
Assembler
1
2
3
4
5
6
7
;подсчитать число единичных битов в регистре AX
MOV CX,16
M1: ROL AX,1
SETC BL
ADD BH,BL
CLC
LOOP M1
Два варианта следующей задачи: если EAX не меньше числа B, тогда EBX=C1 иначе EBX=C2

  1. Assembler
    1
    2
    3
    4
    5
    
     mov ebx,C1
    cmp eax,B
    jge label0
    add ebx,C2-C1
    label0:
  2. Assembler
    1
    2
    3
    4
    5
    6
    
    xor ebx,ebx
    cmp eax,B
    setge bl
    dec ebx
    and ebx,(C1-C2)
    add ebx,C2
if (a<666h) zzz=100h else zzz=300h

  1. Assembler
    1
    2
    3
    4
    5
    6
    7
    
    mov ecx,100h
    mov eax,[var_A]
    cmp eax,666h
    jl l_0
    add ecx,200h
    mov [var_zzz],ecx
    l_0:

  2. Assembler
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    mov eax,[var_A]
    xor ecx,ecx;ecx=0
    cmp eax,666h
    ;if eax<666h SF=1 OF=1 else SF=0 OF=0
    setge cl;if eax<666h cl=1 else cl=0
    not ecx;if eax<666h ecx=-1 else ecx=0
    and ecx,100h-300h
    ;ecx=0FFFFFE00h else ecx=0
    add ecx,300h;if eax<666h ecx=100h
    else ecx=300h mov [var_zzz],ecx
установить переменную Bool=1 если A <= B иначе Bool=0
Assembler
1
2
3
mov ax, A ;значения A и B целые со знаком
cmp ax, B
setle Bool
Так как результат выполнения инструкций setcc всегда 0 или 1 эти инструкции можно использовать совместно с логическими операциями AND, OR, XOR, NOT
установить переменную Bool=1 если условие ((A<=B) and (D=E)) or (F<>G) истинно
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
mov ax, A
cmp ax, B
setle bl
mov ax, D
cmp ax, E
sete bh
and bl, bh
mov ax, F
cmp ax, G
setne bh
or bl, bh
mov Bool, bh
Так как выполнение инструкций setcc всегда устанавливает или сбрасывает восьмой бит результата, то, используя операции сдвига и вращения, можно в байт результата упаковать до восьми результатов разных инструкций сравнения:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cmp Val7, 0
setne al;установить 0-й бит в зависимости от значения Val7
cmp Val6, 0
setne ah
shr ah, 1;передаем значение 0-го бита в Carry Flag
rcl al,1;установить 0-й бит в зависимости от значения Val6
;значение Val7 определяется теперь по 1-му биту
cmp Val5, 0
setne ah
shr ah, 1
rcl al, 1
cmp Val4, 0
setne ah
shr ah, 1
rcl al, 1
cmp Val3, 0
setne ah
shr ah, 1
rcl al, 1
cmp Val2, 0
setne ah
shr ah, 1
rcl al, 1
cmp Val1, 0
setne ah
shr ah, 1
rcl al, 1
cmp Val0, 0
setne ah
shr ah, 1
rcl al, 1
;сейчас в AL все биты установлены в зависимости от значений Val0-Val7.
Если подходить к командам условного перехода с позиции машинной кодировки команд, то четыре старших бита команды (для микропроцессора i8086) содержат код 7, а четыре младших бита команды обозначают условие операции. Условие задается в битах 1-3, а установка бита 0 приводит к его инверсии.
 Код операцииУсловиеИнверсия
биты7 6 5 4 3 2 1 0
Те же самые биты используются и при кодировке команд SETcc и CMOVcc (код операции F9 для команд SETcc и F4 для CMOVcc, кроме того в кодировке команд CMOVcc, как и в коде любой команды MOV, будут присутствовать биты режима, биты адреса регистра приемника и биты адреса регистра источника). Как видите, условий совсем немного, и проблем с их запоминанием обычно не возникает. Теперь уже не нужно мучительно вспоминать jz – это 74h или 75h. Так как младший бит команды равен нулю, то jz – это 74h, а jnz, соответственно, 75h.
Код Мнемоника Условие
01110000 O Переполнение
01110010 B, NAE Меньше
01110100 Z Равно
01110110 BE, NA Меньше или равно
01111000 S Знак
01111010 P, PE Четно
01111100 L, NGE Меньше (знаковое)
01111110 LE, NG Меньше или равно (знаковое)
Код jccМнемо-КодМнемо-КодМнемоника
короткий длинныйника ника  
70h 0F80h JO 0F90h SETO 0F40 cw/cd CMOVO
71h 0F81h JNO 0F91h SETNO 0F41 cw/cd CMOVNO
72h 0F82hJC/JB/JNAE0F92hSETC/SETB/SETNAE0F42 cw/cdCMOVC/CMOVB/CMOVNAE
73h 0F83hJNC/JNB/JAE0F93hSETNC/SETNB/SETAE0F43 cw/cdCMOVNC/CMOVNB/CMOVAE
74h 0F84h JE/JZ 0F94h SETE/SETZ 0F44 cw/cd CMOVE/CMOVZ
75h 0F85h JNE/JNZ 0F95h SETNE/SETNZ 0F45 cw/cd CMOVNE/CMOVNZ
76h 0F86h JBE/JNA 0F96h SETBE/SETNA 0F46 cw/cd CMOVBE/CMOVNA
77h 0F87h JNBE/JA 0F97h SETNBE/SETA 0F47 cw/cd CMOVNBE/CMOVA
78h 0F88h JS 0F98h SETS 0F48 cw/cd CMOVS
79h 0F89h JNS 0F99h SETNS 0F49 cw/cd CMOVNS
7Ah 0F8Ah JP/JPE 0F9Ah SETP/SETPE 0F4A cw/cd CMOVP/CMOVPE
70h 0F80h JO 0F90h SETO 0F40 cw/cd CMOVO
7Bh 0F8Bh JNP/JPO 0F9Bh SETNP/SETPO 0F4B cw/cd CMOVNP/CMOVPO
7Ch 0F8Ch JL/JNGE 0F9Ch SETL/SETNGE 0F4C cw/cd CMOVL/CMOVNGE
7Dh 0F8Dh JNL/JGE 0F9Dh SETNL/SETGE 0F4D cw/cd CMOVNL/CMOVGE
7Eh 0F8Eh JLE/JNG 0F9Eh SETLE/SETNG 0F4E cw/cd CMOVLE/CMOVNG
7Fh 0F8Fh JNLE/JG 0F9Fh SETNLE/SETG 0F4F cw/cd CMOVNLE/CMOVG
Команды CMOVcc
(Условная передача данных = ”Condition MOVE”)
Синтаксис команд:
CMOV<condition code> <DEST>,<SRC>
Возможные варианты команды:
cmovcc reg32,reg32
cmovcc reg32,[reg32]
cmovcc reg32,mem32
Семантика команды
: передача данных из операнда SRC в операнд DEST при выполнении условий, определяемых состоянием соответствующих флагов.
Алгоритм работы: команды проверяют истинность условия, заданного в коде операции, то есть, фактически, состояние определенных флагов, и если условие выполняется (производится передача данных из операнда SRC в операнд DEST), то команда заканчивается без пересылки.
Псевдокод:
temphttps://www.cyberforum.ru/cgi-bin/latex.cgi?\leftarrowSRC
IF(64-Bit Mode)
THEN
IF condition TRUE
THEN
IF (OperandSize =64)
THEN
DESThttps://www.cyberforum.ru/cgi-bin/latex.cgi?\leftarrowtemp
ELSE
DESThttps://www.cyberforum.ru/cgi-bin/latex.cgi?\leftarrowtemp AND 0x0FFFFFFFF
ENDIF
ENDIF
ELSE
IF condition TRUE
THEN
DESThttps://www.cyberforum.ru/cgi-bin/latex.cgi?\leftarrowtemp
ENDIF
ENDIF
Команды условной пересылки данных
Команда Проверяемые флаги Логическое условие
CMOVA/ CMOVNBE CF = 0 и ZF = 0 выше
CMOVAE/ CMOVNB/CMOVNC CF = 0 выше или равно / нет переноса
CMOVB/CMOVNAE/ CMOVC CF = 1 ниже / перенос
CMOVBE/ CMOVNA CF = 1 или ZF = 1 ниже или равно
CMOVE/CMOVZ ZF = 1 равно или ноль
CMOVG/ CMOVNLE ZF = 0 или SF = OF больше
CMOVGE/ CMOVNL SF = OF больше или равно
CMOVL/ CMOVNGE SF?OF меньше
CMOVLE/ CMOVNG ZF=1 или SF ? OF меньше или равно
CMOVNE/ CMOVNZ ZF = 0 не равно или не ноль
CMOVNO OF=0 нет переполнения
CMOVNP/ CMOVPO PF = 0 нет контроля четности
CMOVNS SF = 0 положительное число
CMOVO OF = 1 Переполнение
CMOVP/ CMOVPE PF = 1 контроль четности
CMOVS SF = 1 отрицательное число
Выполнение команды пересылки CMOVcc на состояние флагов не влияет.
Применение: эти команды можно использовать после любой команды, изменяющей флаги, при необходимости анализа результата изменений. Это существенно повышает гибкость программирования на языке ассемблера, одновременно уменьшая объем кода за счет устранения команд сравнения и условного перехода.
;пересылка из регистра EAX в переменную mem32, если флаг ZF=1
cmove eax,mem32
Следующие последовательности эквивалентны:
test ecx,ecx
jne a1
mov eax,ebx
a1:
test ecx,ecx
cmoveq eax,ebx
Команда CMOVEQ выполняет условную пересылку содержимого регистра EBX в EAX. Ветвление устраняется путем замены JNE и MOV на эту команду
Предсказание ветвлений
Обработка команд в современных процессорах осуществляется поэтапно на основе конвейерного принципа. При обнаружении команды условного ветвления может оказаться что операция, определяющая соответствующее условие, еще не выполнена до конца. В этом случае невозможно определить, какая из ветвей программы будет выполняться дальше. До недавнего времени подобные ситуации приводили к тому, что обработка дальнейших команд приостанавливалась до момента вычисления условного перехода. Ввиду того, что длина конвейера может быть весьма велика, это приводило к значительным потерям производительности. Данная проблема может быть решена путем сбора статистической информации о том, исполнение какой ветви условного перехода более вероятно. Данная информация может быть получена, например, во время предыдущих проходов данного участка или кода из «подсказки», вставленном компилятором в исполнимый код. В этом случае процессор может продолжить обработку команд предсказанной ветви программы. В тот момент, когда становится доступным значение условного выражения, проверяется правильность предсказания. Если оно окажется неверным, результаты обработки ошибочно выбранных команд уничтожаются, и начинается обработка альтернативной ветви программы.
Это приводит к простою исполнительных блоков процессора. Таким образом, наихудшим вариантом является условный переход, обе ветви которого равновероятны.
Для всех рассматриваемых процессов приближение вероятности условного перехода к 0,5 приводит к двукратному снижению производительности. Это означает, что каждый неверно предсказанный переход приводит к увеличению времени выполнения соответствующих инструкций примерно в 4 раза.
В связи с этим целесообразно удалять операции условного перехода из часто выполняемых участков программы. Например, если переход выполняется для четных элементов некоторого массива, целесообразно создать два цикла, отдельно обрабатывающих четные и нечетные элементы.

Вернуться к обсуждению:
Электронный учебник Assembler
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2013, 04:52
Готовые ответы и решения:

Посоветуйте учебник и IDE
Посоветуйте пожалуйста хороший учебник и IDE. Выбор встал между RadASM и WinAsm studio. Что лучше?...

Подскажите учебник по Ассемблеру
Подскажите, плиз, учебник по Ассемблеру. Доходчивый, детальный, последовательный. Чтоб с...

Электронный пропуск
Уважаемый пользователи форума, может кто может помочь? Необходимо разработать драйвер для...

Ищу электронный справочник по ассемблеру
Как то давно скачивал в виде экзешника под дос, справочник по ассемблеру. Сейчас у себя не могу...

51
15.11.2013, 04:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2013, 04:52
Помогаю со студенческими работами здесь

Учебник по ассемблеру
Подскажите пожалуйста, ассемблера не знаю вообще, в процессорах тоже мало смыслю (всему научусь)....

Учебник Assembler x86
Привет. Подскажите хороший учебник, желательно на русском языке по Assembler x86.

Электронный учебник
Здравствуйте. Есть электронный учебник, на форме есть Webbrowser, sPanel1, Tsscrollbox, speedbuton...

Электронный учебник
Здраствуйте..Ищу электронный учебник по программированию сделанный в дельфи..Если есть у кого...

Электронный учебник
Здравствуйте! Хотелось бы написать электронный учебник по математике для школьников, посоветуйте...

Электронный учебник
Салам Всем!!! Дайде совет, где можно написать электронный учебник, нужно чтобы объем был...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru