注册 登录
编程论坛 汇编论坛

[求助] 将两个十位数相乘

JEFFONE 发布于 2007-06-26 23:18, 1733 次点击

DATA SEGMENT
DATA1 DB 32H,39H,30H,35H,34H
DATA2 DB 33H
RESULT DB 6 DUP(00H)
DATA ENDS
STACK SEGMENT STACK'STACK'
STA DB 30 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2
MOV BL,[SI]
AND BL,00001111B
MOV SI,OFFSET DATA1
MOV DI,OFFSET RESULT
MOV CX,05
LOOPL: MOV AL,[SI]
AND AL,00001111B
INC SI
MUL BL
AAM
ADD AL,[DI]
AAA
ADD [DI],AL
INC DI
MOV [DI],AH
LOOP LOOP1
MOV CX,06
MOV SI,OFFSET RESULT+5
DISPL: MOV AH,02
MOV DL,[SI]
ADD DL,30H
INT 21H
DEC SI
LOOP DISPL
MOV AX,4C00H
INT 21H
CODE ENDS
END START


但出左個loop1錯暨msg
error jeff.asm(34) undefined symbol:loop1
請教各位高人指點

[此贴子已经被作者于2007-6-26 23:25:01编辑过]

12 回复
#2
菜鸟上路2007-06-27 08:51
把LOOPL改成LOOP1
#3
JEFFONE2007-06-27 13:14

唔多明.........RUN 唔到

#4
herbert_19872007-06-27 13:43
LOOPL: MOV AL,[SI]
AND AL,00001111B
INC SI
MUL BL
AAM
ADD AL,[DI]
AAA
ADD [DI],AL
INC DI
MOV [DI],AH
LOOP LOOP1
#5
JEFFONE2007-06-28 01:08
回复:(herbert_1987)LOOPL: MOV AL,[SI] ...

請教...如果改成手動輸入兩個十位數應該點改....唔知點樣改

#6
herbert_19872007-06-28 01:11
用 02中断 循环输入单个字符,
把字符处理成数字.
#7
JEFFONE2007-06-28 22:41

應該放系邊個位.......點处理成数字...可以試一次個程序比我睇睇ma

#8
herbert_19872007-06-28 22:58
data segment
n db 0
data ends

code segment
.....

; 输入十位的数
mov ah, 02
int 21h
sub al, 30h ; 把字符变成相应的数字
mov cl, 10
div cl ;
mov bl, n
add bl, al
mov n, bl

;输入个位的数
mov ah, 02
int 21h
sub al, 30h
mov bl, n
add bl, al
mov n, bl
;n 就是所输入的十位数
; 这里没用循环
#9
JEFFONE2007-06-28 23:59

可以試一次運行到ga程序的全部滙編碼比我ma>
同埋想問下系masm32點解之前run 的progrome.唔得ga

#10
herbert_19872007-06-29 00:04

无呀, 自己写啦.
用masm32写中断好似吴得嘎.

#11
JEFFONE2007-06-29 11:52
回复:(JEFFONE)[求助] 将两个十位数相乘
我新手來GA....菜鳥一名....可以幫我試調成輸入兩個十進制數
#12
herbert_19872007-06-29 12:03
定义两个变量:
sum dw 0
n dw 0;

输入一个数字字符 -> 转换成数字 -> 存放于 n 中 -> sum = sum * 10 + n;
再输入一个 -> 转换成数字 -> 存放于 n 中 -> sum = sum * 10 + n;
再来一个......
#13
爱以走远2007-06-29 17:34
以下是引用herbert_1987在2007-6-28 22:58:46的发言:
data segment
n db 0
data ends

code segment
.....

; 输入十位的数
mov ah, 02
int 21h
sub al, 30h ; 把字符变成相应的数字
mov cl, 10
div cl ;
mov bl, n
add bl, al
mov n, bl

;输入个位的数
mov ah, 02
int 21h
sub al, 30h
mov bl, n
add bl, al
mov n, bl
;n 就是所输入的十位数
; 这里没用循环


不过最好用循环
因为你根本就不知道输入几位数

1