如何用8086汇编语言声明和操作一个字符串数组?

时间:2016-03-28 16:49:50

标签: assembly x86-16 emu8086

我在emu8086版本4.08中工作。我必须建立一个学生数据库。所以,如果我想在字符串数组中存储名称或ID列表,我该怎么办?或者还有其他方法吗?提前谢谢。

以下是我正在尝试的代码:

include 'emu8086.inc' 

.model small
.stack 100h  


.data  


  str2 dw 20 dup('$')

.code   

  mov ax,@data
  mov ds,ax

main proc



  mov si,0





  mov str2[si],"student1$"
  add si,1  

  mov str2[si],"student2$"
  add si,1

  mov str2[si],"student3$"
  add si,1

  mov str2[si],"student4$"



mov ah,4ch 
int 21h               

endp main 


DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS  
DEFINE_PTHIS

1 个答案:

答案 0 :(得分:2)

mov str2[si],"student1$"

你所代表的是错的。你认为它是数组中的索引,但事实并非如此。在汇编语言中,它是内存中的偏移量(以字节为单位)。

字符串“student1 $”有 9 个字符,因此您必须提供空间来存储所有这些字符,每个字符1个字节。此外,您无法一次性分配完整的字符串。你必须使用循环。

首先更改数组的定义并将名称存储在临时位置:

str2 db 4*10 dup(0)
sname db "student1$"

这将为存储4个9个字符的学生姓名以及额外的终止字符(如果需要)提供空间。

接下来使用循环来编写学生姓名:

 mov di, offset str2
 mov si, offset sname
More:
 mov al, [si]
 mov [di], al
 inc si
 inc di
 cmp al, "$"
 jne More

对于下一位学生,该姓名必须写入 str2 + 10