-2

定义一个包含十个 16 位字的数组。从键盘读取包含任何字符的字符串的值。之后,应转换字符串,使其仅保留为小写字母 ( a- z) 的元素。
然后,在屏幕上打印字符串并将CX修改后的序列的元素数量存储在寄存器中。

这是我的代码:

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. 有谁能够帮助我?

4

1 回答 1

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'
于 2015-10-23T15:47:55.440 回答