Объясните почему не правильно! - Assembler
Формулировка задачи:
Я новичок в ассемблере, по этому прошу помощи...
Суть моей программы, я ввожу строку, консоль выводит число, но выводится всякая пакость... Объясните почему
Пишу в MASMе...
.386 .model flat, stdcall option casemap:none include c:\masm32\include\kernel32.inc include c:\masm32\include\user32.inc include c:\masm32\include\windows.inc includelib c:\masm32\lib\kernel32.lib includelib c:\masm32\lib\user32.lib includelib c:\masm32\lib\shell32.lib Bsize equ 20 .data cWriten dd ? cRead dd ? text db "Enter number", 0 buf dd Bsize dup(?) stdout dd ? stdin dd ? FOR_PLUS db 256 dup(0) STR_SHABLON db '%d' NumberWrite db ? .code start: invoke AllocConsole invoke GetStdHandle, STD_OUTPUT_HANDLE mov stdout, eax invoke GetStdHandle, STD_INPUT_HANDLE mov stdin, eax invoke WriteConsoleA, stdout, ADDR text, sizeof text, ADDR cWriten, 0 invoke ReadConsole,stdin,ADDR buf,Bsize,ADDR cRead,NULL xor eAx, eAx lea edx, buf sub cRead, 2 mov ecx, cRead mov bl, 10 metka: mul bl mov dl, [edx] sub dl, 48 add al, dl inc edx loop metka mov NumberWrite, al invoke wsprintf, addr FOR_PLUS, addr STR_SHABLON, NumberWrite invoke WriteConsoleA, stdout, ADDR FOR_PLUS, sizeof FOR_PLUS, ADDR cWriten, 0 invoke Sleep,100000 invoke ExitProcess, NULL end start
Решение задачи: «Объясните почему не правильно!»
textual
Листинг программы
movzx dx, byte ptr [edi]
Объяснение кода листинга программы
- Команда
movzx
используется для перемещения значения из памяти в регистр с расширением байта в слово. dx
- это регистр, который используется для хранения значения, перемещенного из памяти.edi
- это регистр, который используется как индекс для доступа к памяти.byte ptr [edi]
- это адрес памяти, который используется в командеmovzx
. Он указывает на байт памяти, который должен быть перемещен в регистрdx
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д