Прочитать данные из памяти - Assembler
Формулировка задачи:
Здравствуйте . Нужно прочитать данные из памяти по адресу от 00000h до 00400h . Я только смог понять, как прочитать данные из 1-ой ячейки :
А вот как прочитать целый блок ?Как указать , с какого адреса по какой необходимо получать данные ?
Подскажите, пожалуйста . Заранее спасибо!
.386 .model flat,stdcall option casemap:none include\masm32\include\windows.inc include\masm32\include\kernel32.inc include\masm32\include\user32.inc includelib\masm32\lib\kernel32.lib includelib\masm32\lib\user32.lib .data a dw 0 st1 db "MessageBox",0 ;название окна st2 dw ?,0 ;буфер для вывода сообщения ifmt db "a=%d",0dh,0ah,0 .code start: mov a,[00000h] invoke wsprintf,ADDR st2, ADDR ifmt, a invoke MessageBox,NULL,addr st2,addr st1,MB_OK invoke ExitProcess,0 end start
Решение задачи: «Прочитать данные из памяти»
textual
Листинг программы
mov bx, 00400h f: mov ax,[bx] ;загружаем в ax mov [a+bx],ax; иначе все грузишь в одну и ту же переменную sub bx,2 jnz f
Объяснение кода листинга программы
- mov bx, 00400h - присваиваем регистру bx значение 00400h
- f: mov ax,[bx] - загружаем в ax значение по адресу, указанному в bx
- mov [a+bx],ax - записываем значение из ax по адресу, указанному в bx
- sub bx,2 - вычитаем из bx значение 2
- jnz f - если результат вычитания не равен нулю, то переходим к шагу 2