99乘法表,已添加注释,分享一下
以下是源代码:
- assume cs:code,ds:data,ss:stack
-
-
- data segment
- db 100 dup(0)
- data ends
-
- stack segment
- dw 100 dup(0)
- stack ends
-
- code segment
- ;dl*dh=ax
- show:
- push si
- push dx
- push ax
-
- ;被乘数
- mov si,0
- add dl,48
- mov [si],dl
-
- ;乘号
- inc si
- mov byte ptr [si],'*'
-
- ;乘数
- inc si
- add dh,48
- mov [si],dh
-
- ;等号
- inc si
- mov byte ptr [si],'='
-
- ;前面 mul dl 的积 一直是存放在 ax 中,现在拿ax 除以10 ,如果商为0 说明只有一位数,直接转换成对应的 ascii码 存入到内存中
- inc si
- mov dl,10
- div dl
-
- ;判断al商是否为0
- cmp al,0
- je zero
-
- ;如果这里被执行,说明商有2位数,这里只需要把个位转换就下了,十位ah ,永远都会被转换
- add al,48
- mov byte ptr [si],al
- inc si
-
- ;al商为零就跳转到这里来
- zero:
- add ah,48
- mov byte ptr [si],ah
-
- ;结果后面加个空格方便好看
- inc si
- mov word ptr [si],' '
- add si,2
- mov byte ptr [si],'
-
-
-
- ;打印
- mov dx,0
- mov ah,9
- int 21h
-
- pop ax
- pop dx
- pop si
-
- ret ;返回到94行 inc dh
-
- start:
- mov ax,data
- mov ds,ax
-
- mov ax,stack
- mov ss,ax
- mov sp,200
-
- mov cx,9
- mov dl,1 ;dl*dh-->dl*al
- s0:
- push cx
- mov dh,1 ;dh=1
-
- mov cl,dl ;cl=1
- mov ch,0 ;ch=0
-
- s1:
- mov al,dh ;al=1
-
- mul dl ;dh*dl
-
- call show
- inc dh ;dh++
-
- loop s1
-
- push dx
- mov ah,2h
- mov dl,0ah
- int 21h
- mov ah,2h
- mov dl,0dh
- int 21h
- pop dx
-
-
-
- inc dl ;dl++
- pop cx
- loop s0
-
- mov ax,4c00h
- int 21h
-
- code ends
- end start