не могу разобраться с простейшей программой складывающей числа 5 и 10: Код (Text): .386 .model flat, stdcall option casemap :none .DATA MATH_RESULT DB ? .CODE START: MOV EBX, 5 MOV ECX, 10 ADD EBX, ECX MOV MATH_RESULT, EBX END START где здесь ошибка? Как понял переменная MATH_RESULT не видна, поэтому MOV в неё не может быть выполнено. Если так, то как же тогда обьявить эту переменную?
MATH_RESULT видна, просто ты объявил её как BYTE, а ebx - 32-битный регистр, но не 8-битный. Если надо 8-битный, юзай bl - младшие 8 бит, bh - старшие 8 бит (ну и для других регистров соответственно)
Понятно... теперь такой вопрос: как мне все это вывести на экран? либо доса либо винды... дайте пожалуеста пример на основе изложенного мною кода: Код (Text): .386 .model flat, stdcall option casemap :none .DATA SUM_RESULT DD ? .CODE START: MOV EBX, 5 MOV ECX, 10 ADD EBX, ECX MOV SUM_RESULT, EBX END START
Самое простое - воспользоваться стандартными функция конвертирования из библоитеки masm32: Код (Text): .686 .MODEL FLAT,STDCALL option casemap:none include windows.inc include user32.inc include kernel32.inc include masm32.inc includelib user32.lib includelib kernel32.lib includelib masm32.lib .data? SUM_RESULT DD ? SUM_BUFFER DB 10 dup(?) .data lpCaption DB "Result:",0 .code start: MOV EBX, 5 MOV ECX, 10 ADD EBX, ECX MOV SUM_RESULT, EBX invoke dwtoa, SUM_RESULT, offset SUM_BUFFER invoke MessageBox, 0, offset SUM_BUFFER, offset lpCaption, MB_OK+MB_ICONINFORMATION invoke ExitProcess, 0 end start
ПОИСКОМ ПОЛЬЗОВАЛСЯ? В разделе про вопросы о лабах, даже доки есть, скачай и юзай. Там не только текст на экран а все что угодно. Все это это что? код программы?
Только лучше не пользоваться кривыми масмовскими обёртками, а вызывать wsprintf самому Код (Text): .686 .MODEL FLAT,STDCALL option casemap:none include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib .data? SUM_RESULT DD ? TXT_BUFFER DB 100 dup(?) .data lpCaption DB "Складываем :)",0 lpFmt DB "Вычисляем: %d + %d = %d Ура получилось! ", 0 .code start: MOV EBX, 5 MOV EDX, EBX ; на память MOV ECX, 10 ADD EBX, ECX MOV SUM_RESULT, EBX invoke wsprintf, addr TXT_BUFFER, addr lpFmt, EDX, ECX, [SUM_RESULT] invoke MessageBox, 0, offset TXT_BUFFER, offset lpCaption, MB_OK+MB_ICONINFORMATION invoke ExitProcess, 0 end start