如果有人知道汇编语言,我真的需要一些帮助来调试我的程序。我有一个3x3矩阵和一个3元素矢量,我从控制台读取,我需要将它们相乘并显示结果数组。
到目前为止,这是我的代码:
name "2x2_matrix"
include "emu8086.inc"
org 100h ; directive make tiny com file.
.model small
.stack 100h
.data
size dw 3
A db ?,?,?,?,?,?,?,?,?
B db ?,?,?
C db ?,?,?
message_a db 10,13,"type the elements of matrix A:$"
message_b db 10,13,"type the elements of array B:$"
rez db 10,13,"the result is:$"
.code
start:
mov ax,@data
mov ds,ax
mov bx, 0 ;
read_a:
;compare with sizexsize
mov ax, size
mul size
cmp bx, ax
je reset_counter
;display message
mov dx, offset message_a
mov ah, 09h
int 21h
;read element
mov ah, 01h
int 21h
sub al, 30h
mov A[bx], al
inc bx
jmp read_a
reset_counter:
mov bx, 0
jmp read_b
read_b:
;compare with size
mov ax, size
cmp bx, ax
je calcul
;display message
mov dx, offset message_b
mov ah, 09h
int 21h
;read element
mov ah, 01h
int 21h
sub al, 30h
mov B[bx], al
inc bx
jmp read_b
calcul:
mov bx,0
mov cx,0
for_i:
mov ax, size
cmp bx, ax
je print
mov al,b.size
mul bx
mov al, A[bx+1]
mov bh, B[bx+1]
mul bh
add C[bx], ah
mov al, b.A[bx+2]
mov bl, b.B[bx+2]
mul al
add C[bx], ah
mov al, b.A[bx+3]
mov bl, b.B[bx+3]
mul al
add C[bx], ah
inc bx
jmp for_i
print:
mov dx, offset rez
mov ah,09h
int 21h
mov ax,size
mul size
mov cx,ax
mov ax,0
mov bx,0
print_c:
cmp bx,cx
je finish
mov al, C[bx]
CALL PRINT_NUM
inc bx
jmp print_c
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
finish:
ret
end start
end
在插入元素之后似乎循环并且不显示任何内容,我不知道如何调试它。如果有人熟悉汇编程序类型编码并且可以帮我修改代码,我会非常感激!
答案 0 :(得分:1)
通过阅读提供的代码,我发现了一些奇怪的行:
mov bh, B[bx+1]
mul bh
在这里,您可以为寄存器bh
(以及最终bx
)分配一个新值,以便与ah
相乘。但是您也使用bx
作为结果数组的索引。在我看来,好像你在计算必要的信息时更改了数组索引。
以下几行也是如此
mov al, b.A[bx+2]
mov bl, b.B[bx+2]
mul al
add C[bx], ah
mov al, b.A[bx+3]
mov bl, b.B[bx+3]
mul al
add C[bx], ah
但是在这里你应该知道你将al
与al
相乘,我认为这不是理想的操作。
作为解决方案,您可以将bh
或bl
的每次出现重命名为dh/dl
或ch/cl
,并相应地更改乘法中的因子。然后索引保持不变,循环将起作用。