打印乘法表汇编语言

时间:2016-12-19 18:23:55

标签: assembly x86-16 dosbox

你好使用dosbox和masm compilor如何打印乘法表我的代码如下,但它打印特殊字符。 KIndly在这里纠正我做错了。如果任何人可以帮助我完成这个

,请更正代码
     .MODEL SMALL
     .STACK 100H
      .DATA
    MSG DB 'ENTER A DIGIT:$'
    NL DB 0DH,0AH,'$'
  .CODE


 MAIN ENDP
 END MAIN

4 个答案:

答案 0 :(得分:1)

对您来说,我理解的查询是您要打印具有正确输出的乘法表。为此,您需要在两个BCD编号中使用无效的乘法值。 have a look上的link,是完整的汇编程序,可打印出这样的输出

Click on image to see output

答案 1 :(得分:0)

  

KIndly在这里纠正我做错了。

您不会使用调试程序来验证代码的真正功能。

您没有使用说明参考指南来验证代码的真正功能。

您在编写代码时使用了假设和期望,但是您不会在源代码中使用注释对其进行记录。这使得其他人很难猜出什么是错误,什么不是,因为我们只看到指令,但不是你的意图。如果你要评论每组1-5条指令,它们的目的是什么,那么其他人就会更容易向你展示你的期望在哪里,因为教学会做一些你没想到的事情。

另外,代码中的bug很少,但是每个人的代码都有错误,这是正常的。在调试和修复之前。

答案 2 :(得分:0)

您的乘法结果是具有多个数字的数字,因此您需要一个过程将数字转换为字符串,例如,将21转换为'21',因为如果您显示21,则屏幕将显示ASCII字符21 ( '§')。

我将向您的代码添加“number2string”过程,此过程有两个参数:AX是要转换的数字(在您的情况下,乘法的结果),以及{{ 1}}使用字符串变量的地址:

SI

答案 3 :(得分:0)

.model small
.stack 100h
.data
num db ?
msg db 'Enter a digit:$'
string db 5 dup(?)
.code
main proc
mov ax, @data
mov ds, ax

lea dx, msg      ;; display enter a digit:
mov ah, 9
int 21h
mov ah, 1            ;; gets a digit as character
int 21h
sub al, 48     ;; convert character into number
mov num, al

xor bx, bx
mov bl, 1
mov cx, 10
top:mov al, num           ;; multiplication step
mul bl
push bx                 ;; reserving bx and cx for later use by pushin stack
push cx
lea si, string

mov bx, 10          ;; storing 2 digits number as character in string
xor cx, cx
division: xor dx,dx
div bx
push dx
inc cx
cmp ax, 0
jne division
store: pop dx
add dl, 48
mov [si], dl
inc si
loop store
mov [si], '$ '

pop cx
pop bx
mov dl, 13             ;;; new line
mov ah, 2
int 21h
mov dl, 10
mov ah, 2
int 21h

lea dx, string       ;;get that 2 digit number which is character from string
mov ah, 9
int 21h

inc bl
loop top                 ;; multiplication table stops

mov ah, 4ch             ;; end of program
int 21h
main endp
end

enter image description here