我在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
答案 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