我如何解决 * 将两个 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。