Доброго времени суток, прошу подсказать, что в нижеприведенной программе неверно: Заранее благодарен. ps: это синтаксис masm intel 8086
Что то я впервые вижу Code: inint ax - это что за команда такая? div cx, тут нужен операнд outint dx и это? Вот,почитайте http://www.codenet.ru/progr/asm/newbee/lesson8.php самые основы...
Code: Макрокоманды вывода на экран целого значения [B]outint [/B]op1[,op2] [B]outword [/B]op1[,op2] Code: Макрокоманда ввода целого числа [B]inint [/B]op1 http://assembler.programmation.ru/
код компилируется, но после ввода числа ничего не происходит, а по идее должно вывести значение регистра dx в котором значение остатка от деления.
Помогите программа циклюется... Непонятно чего??? calcavg.cpp Code: #include <stdio.h> extern "C" float Average(char *ValuePtr); int main() { Average("FILE.TXT"); return 0; } average.asm Code: .MODEL SMALL .data buf DB 2600 dup('$') a DB 257 dup(0) .CODE PUBLIC _Average _Average PROC push bp mov bp,sp mov ax,@data mov ds,ax MOV ax, 3D00h MOV dx,[bp+4] INT 21h PUSH ax MOV ah, 3Fh POP BX MOV DX, offset buf INT 21h MOV AH, 3Eh INT 21h MOV AH, 9 MOV DX, offset buf INT 21h add sp,4 pop bp ret _Average ENDP END FILE.TXT Code: 1dfgdfg compil.bat Code: echo off cls bcc calcavg.cpp average.asm del *.obj pause Выводит Code: 1dfgdfg1dfgdfg1dfgdfg1dfgdfg......(и.т.д)
assembler Начал вести свой блог по assembler Вот он Строго прошу не судить..сам только недавно начал его изучать, и пытаюсь объяснить всем кто тольrо начинает учить assembler более просто и понятно..и уберечь от основной массы ошибок и проблем
Этот блог про (MASM) или обширно про весь ассемблер (MASM • GAS • fasm • NASM • RosASM • TASM • Yasm • HLASM)
Извращенец , но если очень надо, то пару годных есть на васм http://web.archive.org/web/20120119112612/http://wasm.ru/publist.php?list=28 P.S Васм не робит,в архиве можно посмотреть.
Вопрос в коде. Code: #include <stdio.h> int main() { char* testStr = "TEST STRING HEHEHE"; char* formatStr = "eax: %d, ebx: %d, ecx: %s, edx: %s, teststr: %s"; __asm { mov eax, 1337; mov ebx, 1337; dec eax; inc ebx; mov edx, dword ptr ds:[testStr]; //--------------- //Какие есть более адекватные варианты для осуществления этого действия ? //Т.е. получение адреса в массиве mov ecx, edx; add ecx, 5; //--------------- push testStr; push edx; push ecx; push ebx; push eax; push formatStr; call dword ptr ds:[printf]; pop testStr; pop edx; pop ecx; pop ebx; pop eax; pop formatStr; } getchar(); return 0; }
MTV, мне кажется, что это можно сделать как-то более элегантно... Разве регистры (E)SI, (E)DI, (E)BP не существуют для осуществления подобных операций ?
Помогите написать программу, очень нужно. Есть масив x[1..1000] y[1..1000] z=[] Без разницы какие буду даные, желательно рандом. Нужно сложить елементы с масива х с масивом у, и записать результат в масив z. И найти числа кратные 2. И вывести их на екран.
Code: .data x dd 1000 dup (0) y dd 1000 dup (0) z dd 1000 dup (0) .code SArray proc mov ecx,1000 xor eax, eax lea edi, offset x set_x_array: stosb inc al loop set_x_array xor eax,eax mov ecx,1000 lea edi, offset y set_y_array: stosb inc al loop set_y_array mov ecx, 1000 lea edi, offset z lea esi, offset x lea ebx, offset y sum_array: lodsb add al,byte ptr [ebx] inc ebx stosb bt al, 0 jnc sum_array_1 mov ebx, 1000 sub ebx, ecx ;в ebx номер элемента в массиве z, от 0 до 999 ;в al число, являющееся суммой соответствующих элементов массивов x и y, кратное 2 ;здесь надо что то сделать чтоб потом отобразить элементы кратные 2 sum_array_1: loop sum_array SArray endp Синтаксис MASM. Сори если есть опечатки, написал на что меня хватило... Печатал на планшете, а это чертовски неудобно! В начале надо вызвать GetModuleHandle, затем AllocConsole, затем getstdhandle для получения хендла стандартного вывода, а после этого с помощью write выводить на экран данные. Чем смог помог! Маловероятно, что за тебя, кто то сделает всю прогу бесплатно...
Кто знает, как получить информацию, о количестве ядер/потоков процессора? Проверял что 3-й байт регистра ebx или edx (точно не помню), после вызова Cupid с значением eax равным 0x01, отображает правильное к-во потоков, но на i7 вместо 8 (как в диспетчере задач) выдает 16 (010h)... На виртуалке, выдает столько, сколько поставишь в настройках... Заранее благодарю, за конструктивную помощь! С уважением KIR@PRO