Получить из текста гласные буквы и сделать их заглавными - Assembler

Узнай цену своей работы

Формулировка задачи:

задание; введите в консоле текст и чтобы программа на следующей строчке вывела гласные буквы и перевела их в заглавные

Решение задачи: «Получить из текста гласные буквы и сделать их заглавными»

textual
Листинг программы
.model small
.stack 1024
.data
STR_N db 250d
vveli db ?
stroka db 250 dup('$')
result db 250 dup('$')
m_table db 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 008h, 009h, 00Ah, 00Bh, 00Ch, 00Dh, 00Eh, 00Fh
      db 010h, 011h, 012h, 013h, 014h, 015h, 016h, 017h, 018h, 019h, 01Ah, 01Bh, 01Ch, 01Dh, 01Eh, 01Fh
      db 020h, 021h, 022h, 023h, 024h, 025h, 026h, 027h, 028h, 029h, 02Ah, 02Bh, 02Ch, 02Dh, 02Eh, 02Fh
      db 030h, 031h, 032h, 033h, 034h, 035h, 036h, 037h, 038h, 039h, 03Ah, 03Bh, 03Ch, 03Dh, 03Eh, 03Fh
      db 040h, 041h, 042h, 043h, 044h, 045h, 046h, 047h, 048h, 049h, 04Ah, 04Bh, 04Ch, 04Dh, 04Eh, 04Fh
      db 050h, 051h, 052h, 053h, 054h, 055h, 056h, 057h, 058h, 059h, 05Ah, 05Bh, 05Ch, 05Dh, 05Eh, 05Fh
      db 060h, 061h, 062h, 063h, 064h, 065h, 066h, 067h, 068h, 069h, 06Ah, 06Bh, 06Ch, 06Dh, 06Eh, 06Fh
      db 070h, 071h, 072h, 073h, 074h, 075h, 076h, 077h, 078h, 079h, 07Ah, 07Bh, 07Ch, 07Dh, 07Eh, 07Fh
      db 080h, 081h, 082h, 083h, 084h, 085h, 086h, 087h, 088h, 089h, 08Ah, 08Bh, 08Ch, 08Dh, 08Eh, 08Fh
      db 090h, 091h, 092h, 093h, 094h, 095h, 096h, 097h, 098h, 099h, 09Ah, 09Bh, 09Ch, 09Dh, 09Eh, 09Fh
      db 0A0h, 0A1h, 0A2h, 0A3h, 0A4h, 0A5h, 0A6h, 0A7h, 0A8h, 0A9h, 0AAh, 0ABh, 0ACh, 0ADh, 0AEh, 0AFh
      db 0B0h, 0B1h, 0B2h, 0B3h, 0B4h, 0B5h, 0B6h, 0B7h, 0B8h, 0B9h, 0BAh, 0BBh, 0BCh, 0BDh, 0BEh, 0BFh
      db 0C0h, 0C1h, 0C2h, 0C3h, 0C4h, 0C5h, 0C6h, 0C7h, 0C8h, 0C9h, 0CAh, 0CBh, 0CCh, 0CDh, 0CEh, 0CFh
      db 0D0h, 0D1h, 0D2h, 0D3h, 0D4h, 0D5h, 0D6h, 0D7h, 0D8h, 0D9h, 0DAh, 0DBh, 0DCh, 0DDh, 0DEh, 0DFh
      db 0E0h, 0E1h, 0E2h, 0E3h, 0E4h, 0E5h, 0E6h, 0E7h, 0E8h, 0E9h, 0EAh, 0EBh, 0ECh, 0EDh, 0EEh, 0EFh
      db 0F0h, 0F1h, 0F2h, 0F3h, 0F4h, 0F5h, 0F6h, 0F7h, 0F8h, 0F9h, 0FAh, 0FBh, 0FCh, 0FDh, 0FEh, 0FFh
 
message db '........... $'
     
.code
start:
PRINT message
mov ax, data
mov ds, ax
 
mov ax, @data
mov ds, ax
mov es, ax
 
mov ah,10
lea dx, str_n
int 21h
 
cld
lea si, stroka
lea di, result
xor cx,cx
mov cl, vveli
lea bx, m_table
M1:  lodsb
    xlatb
    cmp al, 0
    jne M2
    stosb
 
M2: loop M1
 
mov ax, 4c00h
int 21h
end start

Объяснение кода листинга программы

В коде используется машинный язык ассемблера. Переменные: STR_N - строка, содержащая текст для обработки (250 символов) vveli - переменная, в которой предполагается хранить число (возможно, это номер строки или смещение в тексте) stroka - строка, в которой будут храниться обработанные символы (250 символов) result - строка, в которой будут храниться результаты обработки (250 символов) m_table - таблица, содержащая коды символов (1000 байт) Выполняемые действия:

  1. Загрузка строки STR_N в регистр dx.
  2. Перевод строки в регистр ds.
  3. В цикле обрабатываются символы строки STR_N:
    • Если символ равен 0, то он пропускается.
    • Если символ не равен 0, то он преобразуется в верхний регистр и записывается в строку stroka.
  4. Результат обработки выводится на экран с помощью функции PRINT.
  5. Код завершается возвратом в DOS. Но нужно учесть, что код написан под DOS и использует BIOS-интерфейс для вывода символов на экран. Поэтому он может не работать корректно на современных ОС.

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы