作为我作业的一部分,我需要初始化两个一维数组,每个都有10个2B术语,将每个偶数项乘以2.我找到了一些代码,但我不理解在内存中初始化数组的部分。
在下一部分示例中,在此问题之后,MOV AX,PODACI
是什么意思?
TABELA
TABELA1
和AX
中第一个字词的地址
TABELA
中数组TABELA1
和AX
中的第一个元素(在我的情况下是可能的,因为AX
的大小,我有dw类型数据?)是否有必要在DATA SEGMENT
中仅定义数组,如果上面使用了地址(我需要找到max和min元素,并根据该计划同时定义min_niz1 dw ?
和{{1在数据段中,如果我使用max_niz1 dw ?
),那可能吗?
MOV AX,PODACI
和MOV SI, OFFSET TABELA
是什么意思,会移动MOV DI, OFFSET TABELA1
和SI
中的偏移地址以及DI
和{{1}中的偏移地址以后?
AL
作为第二部分,我需要将数组中的术语乘以2,这可能与下面这部分代码有关吗?
BL
我不知道只使用偶数项的正确方法,并在我的数组中放回新值? 我尝试用emu 8086执行此操作,但解决方案对我来说并不明显。
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
答案 0 :(得分:1)
在下一部分示例中,在此问题之后,MOV AX,PODACI是什么意思?
这对指示
mov ax, PODACI
mov ds, ax
用于设置DS
段注册,使其指向程序的DATA部分。
MOV SI,OFFSET TABELA和MOV DI,OFFSET TABELA1是什么意思,它会在SI和DI中移动偏移地址以及后来在AL和BL中会有什么?
MOV SI, OFFSET TABELA
MOV DI, OFFSET TABELA1
会将SI
和DI
加载到数组中的两个数组,偏移量的偏移量。
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。请记住,在汇编编程中,方括号之间出现的值({{1} }} 内存中的偏移量而不是高级编程语言中的数组下标。
niz1[di]
请注意,您的解决方案是将数组中的术语乘以2
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.
很好,但通过向左移动加倍更好。
祝你好运,将其变成一个有效的计划 (每个程序都需要退出操作系统,这是它的DOS ...)