Помогите пожалуйста, прога не работает.....
.386
.model flat, stdcall
option casemap: none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
.data
dialog db 'Введите строку', 0ah, 0dh, '$' ; Диалог с пользователем
buffer1 db 100 dup (0), '$' ; Буфер в который будет записана строка в нижнем регистре
buffer2 db 100 dup (0), '$' ; Буфер в который будет записана строка в верхнем регистре
buffer2 db 100 dup (0), '$' ; Буфер в который будет записаны символы не соответствующие алфавиту
.code
Start:
;---Вывод диалога на экран:
mov ah, 09h
lea dx, dialog ; Вывод диалога на экран
int 21h ; Вызов прерывания DOS
;---Ввод символов
mov bx, 0
mov cx, 32h
lea dx, buffer1 ; Запись строки в буфер
mov ah, 3fh ; Запрос на ввод
int 21h ; Вызов прерывания DOS
;---Переводим символы строки в нижний и верхний регистр:
call Preobrazovanie
;---Вывод результата на экран:
call next
mov ah, 09h ; Функция 21 прерывания вывода строки символов DOS
lea dx, buffer2 ; Запись в буфер
int 21h
call next
;---Выход из программы:
call getch
mov ax,4c00h ; Функция 21 прерывания DOS выхода из программы
int 21h ; Вызов прерывания DOS
Preobrazovanie proc
push dx
push bx
push cx
push si
;--------Преобразовываем символы исходной строки в верхний регистр
mov si, 0 ; Регистр si позиция текущего символа
mov ax, 0
lable1:
mov al, [buffer1+si] ; Считываем текущий символ в исходной строке
cmp al, 97 ; Сравниваем его с ANSII код с 97 (буква 'a')
jb n1 ; Если код символа меньше кода 97, значит он не в нижнем регистре,
; переходим на метку n1
cmp al, 122 ; Сравниваем его ANSII код с 122 (буква 'z')
ja n2 ; Если код символа больше кода 122, значит это не буква
; переходим на метку n2
sub al, 32 ; Иначе отнисаем 32, переводим буквы в верхний регистр
n1:
mov [buffer2+si] ; Копируем текущий символ в результирующую строку
inc si
cmp al, ah ; Сравниваем прочитанный символ с 0
jne lable1 ; Пока не встречается 0, продолжаем преобразование строки
n2:
mov [buffer3+si] ; Копируем в буфер текущий символ, который не является буквой
inc si
cmp al, ah ; Сравниваем прочитанный символ с 0
jne lable1 ; Пока не встречается 0, продолжаем преобразование строки
Preobrazovanie endp
;-----------------------------------
;процедура - ожидание нажатия клавиши
getch proc
mov ah,01h
int 21h
ret
getch endp
;----------------------------
END Start
0)Что тема по MAsm'у делает в ветке про C/C++/C#?
1)И как же она не работает?Ни задания,ни примеров работы,ни строчки/области,где что-то не получается…
P.S.От увеличения количества восклицательных знаков желание помочь вам вовсе не возрастёт.А то и наоборот
Ой, sorry, немного ни по адресу, ну а задание такое. Нужно перевести буквы из нижнего регистра в верхний, но он выдаёт мне ошибку, я уже исправляла и через LODS пробовала, что-то как-то никак....................((((((((((((((((
Цифры и символы должны копироваться в отдельный буфер, выводится на экран должна только изменённая строка, которую вводил пользователь.
Masm32 не в курсе про прерывания DOS. Либо без них, либо использовать Tasm.
Сразу код не смотрел,а теперь заметил:«include \masm32\include\kernel32.inc» и тут же «int 21h».Разорвало