0

我正在使用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
4

1 回答 1

3
mov str2[si],"student1$"

你错了SI代表什么。您认为它是数组中的索引,但不是。在汇编语言中,它是内存中的偏移量(以字节为单位)。

字符串“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

于 2016-03-28T18:03:56.467 回答