2015-10-22 3 views
-2

Определите массив с десятью 16-разрядными словами. Прочитайте значения строки, содержащей любые символы с клавиатуры. Впоследствии строка должна быть преобразована, чтобы она оставалась только элементами, которые являются строчными буквами (a - z).
Затем напечатайте строку на экране и сохраните в регистре CX количество элементов измененной последовательности.Работа с массивами ассемблер 8086

Это мой код:

data segment 
array dw 10 dup (?) 
i db ? 
ends 

stack segment 
dw 128 dup(0) 
ends 

code segment 

start: 

mov i, 0d  
mov bx, 0h 
insert: ;inserting elements in array work only for db, but i need to work for dw 
mov ah, 01h 
int 21h 
mov array [bx], al 
inc bx 
inc i 
cmp i,4d 
JNE insert 

mov bx, 0h 
mov cl, i 
go: ; loop for finding numbers or same character who are not lowercase letters, deleting, 
     ; and moving lowercase letters on their positions 
mov ax, array[bx] 
cmp ax, 97d 
jl notchar 
cmp ax, 97d 
jg notchar 

loop go 

mov ax, 4c00h 
int 21h 

ends 

end start 

Моя проблема в том, что не правильно работать с dw. Кто-нибудь может мне помочь?

+1

от Google лет»другу. Сначала напишите свой код. – Downvoter

+0

Я отправляю свой код в свой вопрос, помогите мне ... пожалуйста – Emy

+3

Что именно не работает? Откуда вы знаете, что это не работает? Что вы имеете в виду, это не работает с 'dw'? – Downvoter

ответ

2

Нет ничего, что мешало бы хранить слово вместо байта в массиве.

insert: ;inserting elements in array work only for db, but i need to work for dw 
    mov ah, 01h 
    int 21h 
    mov ah, 0   ;ADD THIS LINE 
    mov array [bx], ax ;CHANGE AL TO AX 
    add bx, 2   ;ADD 2 BECAUSE THE ARRAY CONSIST OF WORDS 
    inc i 
    cmp i, 4 
    JNE insert 

Вторая часть вашей программы нуждается в некоторой модификации:

mov ax, array[bx] ;USE ONLY AL, AH=0 
    cmp al, 97   ;ASCII FOR 'a' 
    jb notchar   ;USE UNSIGNED COMPARISON, SO USE 'JB' 
    cmp al, 97+25  ;ASCII FOR 'z' 
    ja notchar   ;USE UNSIGNED COMPARISON, SO USE 'JA' 
Смежные вопросы