我如何解决 * 将两个 8 位数据相乘并存储在 6000 位置及以后 * 在 MSDOS 中对于 masm 8086?
How do I solve * Multiply two 8 bit data and store in 6000 location and onwards * in MSDOS For masm 8086?
Emulation Image
我被要求乘以两个 8 位并在 6000 个内存位置显示输出,但我无法这样做我只能在 AX 中没有内存位置的情况下使用 RET 获得输出。
MYCODE SEGMENT
ASSUME cs:MYCODE
ORG 1000h
START:
nop
L1: mov ax, cs
mov ds, ax
mov sp, ax
mov bx, 3000h
L2: mov al, 10h
mov ah, 10h
L3: MUL al
mov BYTE PTR ds:[bx+3000h], al
HLT
L4: mov ah, 4CH
INT 21H
MYCODE ENDS
END START
mul al
将 AL 乘以 AL 并将结果放入 AX。因为您将 AL 设置为 10h,所以结果是 AX=100h,然后您存储 AL,它是零。如果您想将 AL 乘以 AH 并存储结果,您应该这样做:
mul ah
mov WORD PTR ds:[bx+3000h], ax
你还需要记住8086是little-endian所以当你将AX存储到6000h时,6000h的字节将是0x00,6001h的字节将是0x10。
Emulation Image
我被要求乘以两个 8 位并在 6000 个内存位置显示输出,但我无法这样做我只能在 AX 中没有内存位置的情况下使用 RET 获得输出。
MYCODE SEGMENT
ASSUME cs:MYCODE
ORG 1000h
START:
nop
L1: mov ax, cs
mov ds, ax
mov sp, ax
mov bx, 3000h
L2: mov al, 10h
mov ah, 10h
L3: MUL al
mov BYTE PTR ds:[bx+3000h], al
HLT
L4: mov ah, 4CH
INT 21H
MYCODE ENDS
END START
mul al
将 AL 乘以 AL 并将结果放入 AX。因为您将 AL 设置为 10h,所以结果是 AX=100h,然后您存储 AL,它是零。如果您想将 AL 乘以 AH 并存储结果,您应该这样做:
mul ah
mov WORD PTR ds:[bx+3000h], ax
你还需要记住8086是little-endian所以当你将AX存储到6000h时,6000h的字节将是0x00,6001h的字节将是0x10。