Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2016, 13:56   #1
Kurtojkeee
Пользователь
 
Регистрация: 14.02.2016
Сообщений: 12
По умолчанию Как вывести 2 значения регистра

Добрый день, не могу вывести 2 значения регистров ah и al, если по отдельности то выводит нормально, а вместе ну никак, помогите пожалуйста. Пробовал через Invoke.
Код:
.386 ;Задаём архитектуру процессора
            .MODEL flat, stdcall
            option casemap:none 

            include /masm32/include/windows.inc
            include /masm32/include/user32.inc
            include /masm32/include/kernel32.inc
 
            includelib /masm32/lib/user32.lib
            includelib /masm32/lib/kernel32.lib
 
            include /masm32/macros/macros.asm 
            uselib masm32, comctl32, ws2_32 
            
            .data
            dano_stroka byte "i lovezzed splee"
            mestitle db "Лабораторная работа",0
            
            .code 
start:     
            mov cx, sizeof dano_stroka
            lea edx, dano_stroka     
            mov eax, 0      ; al = количество "z", ah = до пробела
            mov ebx, 0      ; bl = проверяемый символ, bh = символов до пробела
scanChar:   
            mov bl, [edx]
            cmp ah, 0       
            jne spacePass   ; символы до пробела уже посчитаны
            cmp bl, ' '
            jne spacePass
            mov ah, bh
spacePass:          
            cmp bl, 'z'
            jne noZchar
            inc al
noZchar:
            inc edx         ; переходим к следующему символу+1
            inc bh          ; количество просмотренных символов+1
            loop scanChar
            ; в AH количество символов до пробела
            ; в AL количество символов 'z'
            ;invoke wsprintf,offset dano_stroka,chr$("The number of letters Z = %u"), al
            ;invoke MessageBox,0,offset dano_stroka,offset mestitle,MB_ICONASTERISK
            ;invoke wsprintf,offset dano_stroka,chr$("The number of characters up to the first space = %u"), bh
            ;invoke MessageBox,0,offset dano_stroka,offset mestitle,MB_ICONASTERISK
            ;invoke ExitProcess, 0
    
            end start
Kurtojkeee вне форума Ответить с цитированием
Старый 16.05.2016, 14:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я в masm32 не компетентен.
но, может, код отсюда поможет разобраться - http://programmersforum.ru/showpost....68&postcount=6
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2016, 14:50   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Kurtojkeee, огласи толком задание..
не понятно, что ты хочешь сделать с этой строкой:
Код:
dano_stroka byte "i lovezzed splee"
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 16.05.2016, 14:56   #4
Kurtojkeee
Пользователь
 
Регистрация: 14.02.2016
Сообщений: 12
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Kurtojkeee, огласи толком задание..
не понятно, что ты хочешь сделать с этой строкой:
Код:
dano_stroka byte "i lovezzed splee"
Это строка с которой он работает. Входные данные только не с клавиатуры. Он мне должен посчитать количество букв Z(2) в этой строке и количество символов до первого пробела(1).А задание было: В строке введённой с клавиатуры подсчитать количество букв «Z» и количество букв до первого пробела.

Последний раз редактировалось Kurtojkeee; 16.05.2016 в 15:07.
Kurtojkeee вне форума Ответить с цитированием
Старый 16.05.2016, 15:12   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Это строка с которой он работает. Входные данные только не с клавиатуры.
так почему не так?
Код:
dano_stroka db "i lovezzed splee",0
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2016, 15:21   #6
Kurtojkeee
Пользователь
 
Регистрация: 14.02.2016
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так почему не так?
Код:
dano_stroka db "i lovezzed splee",0
Уважаемый друг, спасибо, согласен будет лучше вводить текст с помощью директивы db. Поправил. Насчёт вывода пока дальше не знаю куда двигаться.(((

Последний раз редактировалось Kurtojkeee; 16.05.2016 в 16:10.
Kurtojkeee вне форума Ответить с цитированием
Старый 16.05.2016, 18:02   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Насчёт вывода пока дальше не знаю куда двигаться.(((
Вот тебе решение на FASM'e ..
Посмотри как оформлена строка: текст, а дальше буфера под числа (которые предварительно нужно перевести в символы). Так можно выводить сколько-угодно длинный текст с переносом на новую строку:

Код:
format PE  GUI 4.0
include 'D:\install\fasm\include\win32ax.inc'
include 'D:\install\fasm\include\encoding\win1251.inc'

.data
caption  db  'Лабораторная работа',0
text     db  '   Исходная строка:  Lovezzed splee',13,13,\
             '   Позиция пробела:  '      ; текст в окне
buff1    db  0,0,' ',13,\                 ; с продолжением в виде буфера
             'Количество букв Z:  '       ;
buff2    db  0,0,0                        ; буфер заканчивается нуль терминалом

stroka   db  'Lovezzed splee'             ; исходная строка
size     =   $ - stroka                   ; её длинна

.code
start:
;---------- Ищем первый пробел ------------------------------------
     mov   ecx,size             ; длина строки (цикла)
     push  ecx                  ;    ..запомним
     mov   edi,stroka           ; адрес для SCASB
     mov   al,' '               ; что будем искать
     repne scasb                ; поиск пошёл...
     pop   eax                  ;
     sub   eax,ecx              ; расчитываем разницу
     aam                        ; ASCII коррекция
     or    ax,3030h             ; ..и в символы её
     xchg  ah,al                ;
     mov   word[buff1],ax       ; сохраняем результат в переменной

;---------- Ищем кол-во букв Z в строке ---------------------------
     xor   ebx,ebx              ; сбрасываем счётчик найденых
     mov   esi,stroka           ; адрес для LODSB
     mov   ecx,size             ; длина строки
     mov   ah,'z'               ; символ для поиска в AH
@1:  lodsb                      ; читаем символ из SI в AL
     cmp   ah,al                ; сравниваем их
     jnz   @2                   ; пропускаем, если не равно
     inc   ebx                  ; иначе: счётчик +1
@2:  loop  @1                   ; мотаем цикл СХ-раз...
     mov   eax,ebx              ;
     aam                        ; переводим результат в символы
     or    ax,3030h             ;
     xchg  ah,al                ;
     mov   word[buff2],ax       ;   ..и сохраняем его в переменной


     invoke  MessageBox,0,text,caption,MB_OK
     invoke  ExitProcess,0

.end start
Изображения
Тип файла: jpg 2.JPG (7.2 Кб, 51 просмотров)
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 16.05.2016, 18:39   #8
Kurtojkeee
Пользователь
 
Регистрация: 14.02.2016
Сообщений: 12
По умолчанию

Низкий поклон буду во всё разбираться!
Kurtojkeee вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в делфи вывести значения на экран Эдик Кузьменко Общие вопросы Delphi 5 24.12.2014 13:44
Как вивисть значения регистра AX?? yura_zb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.11.2012 15:35
Как вывести значение регистра данных на экран??? ~VL@D~ Помощь студентам 0 30.03.2011 14:16
вывод на вторую строку экрана значения регистра Steil Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 24.05.2010 12:15
как присвоить все три значения вектору В и вывести его как массив столбец при вызове функции Tomoa Microsoft Office Excel 8 08.03.2010 20:42