【问题标题】:Multiplying using assembly 8086 in DOSBOX在 DOSBOX 中使用程序集 8086 进行乘法运算
【发布时间】:2013-04-12 16:35:05
【问题描述】:

我正在尝试做一个基本的乘法,但我不断收到错误,我不明白为什么。我知道我必须使用“MUL”。

这是我正在使用的代码

POP AX 
MOV AL, [NUMB]
MUL 10H
POP AX
RET

错误是:MUL 10H 处的操作码和操作数组合无效

【问题讨论】:

  • 你尝试了什么?错误是什么?
  • 1) 发布代码。 2)发布您的汇编程序命令行。 3) 发布您收到的实际错误消息。
  • 阅读文档通常比提问更有效:8085projects.info/post/…

标签: assembly x86-16


【解决方案1】:

这里是无符号乘法(MUL 操作数)的一个很好的例子:

Inputting a 2-digit decimal number

MOV AH, 1       ;read first digit
INT 21H
SUB AL, ‘0’     ; convert digit from ASCII code to binary
MOV BL, 10
MUL BL          ; multiply digit by 10
MOV CL, AL
MOV AH, 1       ; read 2nd digit
INT 21H
SUB AL, ‘0’     ; convert digit from ASCII code to binary
ADD AL, CL      ; AL contains the 2-digit number

您还必须阅读文档以了解每条指令的含义及其工作原理。 这是一个开始学习汇编的好网站,每个基本指令都有很好的例子 Complete 8086 instruction set instruction set of 8086 with examples

【讨论】:

  • @harold 我已经尝试了上面的代码并查看了一些网站,但我似乎无法将其应用于我自己的代码。我不是在寻求答案,只是帮助我理解它
  • @NeverEnding 为什么我会参与其中?那好吧。请注意 mul 只接受 reg/memory 操作数,而不是常量。
  • @harold 因为你是第一个回复的?谢谢,它现在可以工作了
【解决方案2】:

我知道这真的很晚了,但问题是你不能乘以立即数。您需要将该值加载到寄存器中,然后将该寄存器作为操作数进行 mul 。像这样:

mov al, [麻木]
mov 啊,10h
么么哒

另外,我不确定您在使用 pop 指令做什么,但看起来您正在弹出 ax 两次,这将使其加载未知值。你的意思是一开始就用push指令吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2022-11-25
    相关资源
    最近更新 更多