【问题标题】:Working with arrays assembler 8086使用数组汇编器 8086
【发布时间】:2015-10-22 16:58:48
【问题描述】:

定义一个包含十个 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 不能正常工作。有人可以帮帮我吗?

【问题讨论】:

  • Google 的你的朋友。首先发布您的代码。
  • 我在我的问题中发布我的代码帮助我...请
  • 究竟是什么不起作用?你怎么知道它不起作用?你是什​​么意思它不适用于dw
  • 当我从键盘插入一个字符时,因为 dw 是 2bytes 我可以把它写在 [bx] 中。该指令仅适用于 db ( mov array [bx], al ),如果我定义数组 db 10,我想将 dw 保存在数组 no db 中,但数组 dw 10 不起作用,emu8086 给我一个错误

标签: arrays assembly x86 x86-16 emu8086


【解决方案1】:

没有什么可以阻止您在数组中存储一个单词而不是一个字节。

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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2012-01-04
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多