微机原理中显示九九乘法表
时间: 2024-02-19 21:57:49 浏览: 75
微机原理中显示九九乘法表,需要使用一块显示屏来进行显示。以下是基于8086微处理器的汇编语言程序,实现了在显示屏上输出九九乘法表的功能。
```assembly
.model small
.stack 100h
.data
screen db 0b800h ; 显示屏地址
row db 0 ; 当前行
column db 0 ; 当前列
num1 db ?
num2 db ?
result db ?
.code
mov ax, @data
mov ds, ax
; 初始化显示屏
mov ax, 0b800h
mov es, ax
mov cx, 2000 ; 80 * 25个字符
mov al, ' ' ; 空格
mov ah, 07h ; 白底黑字
rep stosw
; 输出九九乘法表
mov cx, 9
mov bx, 1
L1:
mov num1, bx
mov cx, 9
mov bx, 1
L2:
mov num2, bx
mul num1 ; AX = num1 * num2
mov result, al
mov ah, 07h ; 白底黑字
mov al, num1
call write_char
mov al, '*'
call write_char
mov al, num2
call write_char
mov al, '='
call write_char
mov al, result
call write_char
mov al, ' '
call write_char
inc bx
cmp bx, 10
jne L2
call next_line
inc num1
cmp num1, 10
jne L1
; 程序结束
mov ah, 4ch
int 21h
; 在显示屏上输出一个字符
write_char proc near
push ax
push bx
push cx
push dx
push es
push di
mov ah, 0ch ; 在显示模式下输出一个字符
mov bh, 0 ; 黑底
mov bl, ah ; 字符属性
mov al, [num1] ; 字符
mov cx, 1 ; 输出一个字符
mov bx, 2 ; 每个字符占两个字节
mov di, ax ; 显示屏地址 = 显示页地址 * 80 + 列号 * 2 + 行号 * 160
mov ax, 0b800h ; 显示屏地址
mul byte ptr [row] ; 显示页地址 = 行号
add ax, word ptr [column] ; 列号 * 2
add ax, di ; 行号 * 160
mov di, ax ; 显示屏地址
mov es, di ; 显示屏段地址
stosw ; 输出一个字符
inc byte ptr [column] ; 列号 + 1
cmp byte ptr [column], 80 ; 列号 >= 80
jne write_char_end
call next_line
write_char_end:
pop di
pop es
pop dx
pop cx
pop bx
pop ax
ret
write_char endp
; 换行
next_line proc near
mov byte ptr [column], 0 ; 列号 = 0
inc byte ptr [row] ; 行号 + 1
cmp byte ptr [row], 25 ; 行号 >= 25
jne next_line_end
mov byte ptr [row], 0 ; 行号 = 0
next_line_end:
ret
next_line endp
end
```
在程序中,首先初始化显示屏。然后,输出九九乘法表。在输出每一个字符时,需要计算出该字符在显示屏上的地址,并将字符写入到该地址对应的内存中。最后,程序结束。
阅读全文