作为我家庭作业的一部分,我需要初始化两个一维数组,每个数组有 10 个 2B 项,将每个偶数项乘以 2。我找到了一些代码,但我不明白在内存中初始化数组的部分内容。
在示例的下一部分,在此查询之后,MOV AX,PODACI
是什么意思?
- 它是否只移动数组
TABELA
中第一个术语的地址,并在AX
中移动TABELA1
- 或者它移动数组
TABELA
中的第一个元素,AX
中移动TABELA1
元素(在我的情况下,由于AX
的大小,我有 dw 类型的数据?
如果如上所述使用地址,是否有必要在DATA SEGMENT
中仅定义数组(我需要找到最大和最小元素,并根据该计划在数据段中定义min_niz1 dw ?
和max_niz1 dw ?
,如果我使用MOV AX,PODACI
,这可能吗)?
MOV SI, OFFSET TABELA
和MOV DI, OFFSET TABELA1
是什么意思,这会在SI
和DI
中移动偏移地址吗,稍后AL
和BL
中会是什么?
:
PODACI SEGMENT 'DATA'
TABELA DB 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 27h, 7Fh, 6Fh
TABELA1 DB 3Fh, 05h, 5Bh, 04h, 03h, 6Dh, 7Dh, 27h, 01h, 6Fh
PODACI ENDS
PROGRAM SEGMENT 'CODE'
ASSUME CS:PROGRAM,DS:PODACI
START: MOV AX,PODACI
MOV DS,AX
MOV SI,0
MOV DI, 0
MOV CX, 10
MOV SI, OFFSET TABELA
MOV DI, OFFSET TABELA1
petlja: MOV AL, [SI]
MOV BL, [DI]
CMP AL, BL
JNZ nije
INC DX
nije: INC SI
INC DI
loop petlja
PROGRAM ENDS
END START
作为第二部分,我需要将数组中的偶数项乘以 2,下面这部分代码可能吗?
mov ax,niz1[di]
add ax,ax
mov niz1[di],ax
我不知道这种正确方法是否只使用数组的偶数项,并将新值放回我的数组中? 我尝试使用 emu 8086 执行此操作,但解决方案对我来说并不明显。
even:
MOV DI, 0
mov ax,niz1[di]
add ax
mov niz1[di],ax
inc di
inc di
cmp di,11
jle even:
您学习的程序
在示例的下一部分,在此查询之后,MOV AX,PODACI 是什么意思?
一对指令
mov ax, PODACI
mov ds, ax
用于设置DS
段寄存器,使其指向程序的 DATA 部分。
、OFFSET TABELA 和 MOV DI,OFFSET TABELA1,这会移动 SI 和 DI 中的偏移地址吗?稍后会在 AL 和 BL 中移动什么?
MOV SI, OFFSET TABELA
MOV DI, OFFSET TABELA1
将加载SI
和DI
,偏移量到两个数组,偏移量在 DATA 部分中。
MOV AL, [SI]
MOV BL, [DI]
将加载AL
,每个数组都有一个字节大小的元素BL
。
您的任务
我需要初始化两个一维数组,每个数组有 10 个 2B 项,将每个偶数项乘以 2
要使用 10 个 2B 项初始化新数组,请使用DW
指令:
niz1 dw 100,200,300,400,500,600,700,800,900,1000
此数组中所有元素的下标为 0, 1, 2, 3, 4, 5, 6, 7, 8, 9。偶
数项是那些数组下标为偶数的元素,因此数组元素 0、2、4、6、8。
由于每个数组元素在内存中占用 2 个字节,因此可以找到这些元素的偏移量为 0、4、8、12、16。请记住,在汇编编程中,方括号(niz1[di]
)之间的值是内存中的偏移量,而不是像高级编程语言那样的数组下标。
xor di, di ;Similar to "MOV DI,0".
Even:
shl niz1[di], 1 ;Doubles this element.
add di, 4 ;Goes to next 'even' term.
cmp di, 20 ;Total size of the array.
jb Even ;Repeat as long as we're IN the array.
请注意,您的解决方案将数组中的偶数项乘以 2
mov ax,niz1[di]
add ax !!! typo?
mov niz1[di],ax
很好,但加倍向左移动更好。
祝你好运,把它变成一个工作程序。
(每个程序都需要退出操作系统,这里是DOS...