|
10鱼币
汇编编写输出99乘法表的程序:输出是无限循环,而且是乱码,求各位大佬帮忙看一下是哪里有问题,万分感谢!
- assume cs:code,ds:data,ss:stack
- data segment
- num1 dw 1;乘数1
- num2 dw 1;乘数2
- num3 dw 1;乘积
- char1 dw '*;乘号
- char2 dw '=;等号
- char3 dw 0ah,';空格
- char4 dw 0dh,';回车
- char0 dw 0,0,0,0,';储存数字转换成的字符串
- data ends
- stack segment
- dw 8 dup(0)
- stack ends
- code segment
- start:
- mov ax,data
- mov ds,ax;初始化
- mov di,9;记录外层循环次数
- s1:
- mov cx,ds:[num1];内层循环次数由num1决定,如2*1这一行内部循环2次
- s2:;进入内层循环
- call instack;跳转到instack,用于将数字转换为字符输出
- mov dx,[num1]
- mov al,dl
- mov ah,0;设置al为乘数1
- mov dx,[num2]
- mul dl;结果存入ax中
- mov [num3],ax;将结果存入num3中
- add [num3],30h;将num3转换为字符
- mov ax,[num3]
- mov [char0+4],ax;存入放字符的数据段中
- call output;跳转到输出
- inc [num2];乘数2自增1
- loop s2;内层循环
- lea dx,[char4]
- mov ah,9
- int 21h;一次内层循环完毕后,输出换行
- mov [num2],1;乘数2变回1
- dec di;记录外层循环的数字-1
- mov cx,di;外层循环次数
- inc [num1];乘数1自增1
- loop s1;外层循环
- mov ah,4ch
- int 21h
- instack:
- push [num1];将乘数1入栈
- mov si,0
- add ss:[si],30h;乘数1转换为字符
- pop [char0+0];将乘数1字符送入储存字符的数据段中
- push [num2];乘数2同理
- mov si,0
- add ss:[si],30h
- pop [char0+2]
- ret;跳转回主程序
- output:
- mov si,0
- lea dx,[char0+si]
- mov ah,9
- int 21h;输出乘数1的字符
- lea dx,char1
- mov ah,9
- int 21h;输出乘号
- mov si,2
- lea dx,[char0+si]
- mov ah,9
- int 21h;输出乘数2的字符
- lea dx,char2
- mov ah,9
- int 21h;输出等号
- mov si,4
- lea dx,[char0+si]
- mov ah,9
- int 21h;输出乘数2的字符
- lea dx,char3
- mov ah,9
- int 21h;输出空格
- ret;返回
- code ends
- end start
复制代码 |
|