|
主题 : : 一段乘法程序 [待解决] |
回复[ 3次 ]
点击[ 284次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-01-10 11:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
练习题目来自【实验五】5小题。
将a段和b段数据相乘, 结果存入c段。
练习代码如下:
$ cat lixi.asm
assume cs:code
a segment
dw 2,4,6,8,10
a ends
b segment
dw 1,3,5,7,9
b ends
c segment
dw 0,0,0,0,0
c ends
code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov ax,c
mov ss,ax
mov bx,0
mov cx,10
s: mov dx,cx
mov cx,es:[bx]
sub ax,ax
s0: add ax,[bx]
loop s0
mov ss:[bx],ax
mov cx,dx
add bx,2
loop s
mov ah,4ch
int 21h
code ends
end start
root@yeah /cygdrive/d/asm
$
实验结果如下:
(调试过程略)
;运行前各段存贮状态
-d ds:0 9
18C9:0000 02 00 04 00 06 00 08 00-0A 00 ..........
-d es:0 9
18CA:0000 01 00 03 00 05 00 07 00-09 00 ..........
-d ss:0 9
18CB:0000 00 00 00 00 00 00 00 00-00 00 ..........
-g 2a
AX=0024 BX=0014 CX=0000 DX=0001 SP=0000 BP=0000 SI=0000 DI=0000
DS=18C9 ES=18CA SS=18CB CS=18CC IP=002A NV UP EI PL NZ NA PE NC
18CC:002A B44C MOV AH,4C
-t
AX=4C24 BX=0014 CX=0000 DX=0001 SP=0000 BP=0000 SI=0000 DI=0000
DS=18C9 ES=18CA SS=18CB CS=18CC IP=002C NV UP EI PL NZ NA PE NC
18CC:002C CD21 INT 21
-p
Program terminated normally
;运行后各段状态, 结果放在SS:0~9
-d ds:0 9
18C9:0000 02 00 04 00 06 00 08 00-0A 00 ..........
-d es:0 9
18CA:0000 01 00 03 00 05 00 07 00-09 00 ..........
-d ss:0 9
18CB:0000 02 00 0C 00 1E 00 38 00-5A 00 ......8.Z.
-q
D:\ASM>
前六章的学习, 基本告一段落, 开始进入第七章的学习啦。。。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-01-10 11:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
核心代码的解释:
s: mov dx,cx ;大循环S开始。先保存作为S循环计数的CX的值
mov cx,es:[bx] ;把EX:[BX]放入CX,作为小循环S0计数
sub ax,ax ;AX清零
s0: add ax,[bx] ;开始小循环S0。开始累加, 结果暂存至AX
loop s0 ;如CX不为零,则跳至S0,继续,否则, 执行下面语句
mov ss:[bx],ax ;把暂存在AX的结果放入地址单元SS
mov cx,dx ;恢复CX的值, 便于循环S使用
add bx,2 ;bx指向下一个字
loop s ;
请大家指点。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-01-11 13:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
1.
s: mov dx,cx ;push cx
.......
mov cx,dx ;pop cx
//可读性更强点
当然你这里ss用来保存最终结果了,直接用的话会覆盖数据了,呵呵
2.
数据可以定义为db吧,数据不大,这样mov cx,5就行了
蛮好的,加油 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-01-11 14:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
1, 哦, 可以利用栈操作!
2,这个倒不是问题。我觉得嵌套循环怪好玩的~~
3,多谢老兄指点 ^_^ | | |
|