一段code的問題九九乘法表,請多多指教,謝謝大家

tocnc111 2008-11-25 08:08:50
一段code的問題九九乘法表,請多多指教,謝謝大家
(一)這行在算十進位,但是我不知道他為什麼 能算出
xor ax,ax
mov al,z
mov bl,10
div bl ; ax / bl = al...ah

(二) 未什麼要or dl,dl 這個呢,自己對自己or部是一樣嗎

pri_dd:
or dl,dl
jnz pri_da
ret

(三) 這段用意為何呢?上段不是已經被xor ax,ax
AX已經被清成0為什麼還要 push ax pop ax呢?


sml0:
push ax
mov dl,al
call pri_dd
pop ax
mov dl,ah

code如下 謝謝

.model small
.386
.data ;

x db ?
y db ? ; x=被乘數 , y=乘數 , z=積
z db ?


.code
.startup

mov al,1
mov x,al ; x=1
mov cx,9

star2:

push cx
mov al,1
mov y,al ; y=1

call next_l

mov cx,9
star0:
push cx
mov al,x
mul y ; x*y => al
mov z,al
mov dl,x
call pri_da

mov dl,'*'
call pri_dl
mov dl,y
call pri_da
mov dl,'='
call pri_dl

xor ax,ax
mov ah,z
cmp ah,10 ; if z < 10 then jump
jb sml0



xor ax,ax
mov al,z
mov bl,10
div bl ; ax / bl = al...ah

sml0:
push ax
mov dl,al
call pri_dd
pop ax
mov dl,ah
call pri_da
call pri_dc
inc y
pop cx
loop star0
inc x
pop cx
loop star2
call next_l

.exit

next_l: mov dl,0dh ;回車換行
call pri_dl
mov dl,0ah
call pri_dl
ret

pri_dd:
or dl,dl
jnz pri_da

ret




pri_dc: mov dl,20h ;空格
jmp pri_dl
pri_da: add dl,30h
pri_dl: mov ah,02
int 21h
ret



mov ax,4ch
int 21

.stack

end
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtdumpling 2008-11-25
  • 打赏
  • 举报
回复
LS正解!!
cnzdgs 2008-11-25
  • 打赏
  • 举报
回复
一、除法指令就是这样规定的,当除数是字节型操作数时,被除数为AX,结果的商放在AL里面,余数放在AH里面。
二、自己or自己的目的是检查寄存器的值是不是0,并且不改变寄存器的值,后面跟着条件跳转指令,习惯上一般用自己test自己。
三、目的是保护AX的值,因为函数调用过程中有可能会改变AX的值。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧