编写一个MBR程序并给出详解,在计算机屏幕显示自己的姓名拼音,拼音后紧跟学号,并计算出上述字符的ASCII值的总和并以十进制形式显示出来
时间: 2024-03-03 12:46:55 浏览: 67
下面是在mbr语言下编写的程序:
```
org 7c00h
start:
; 将显存起始地址加载到es寄存器中
mov ax, 0b800h
mov es, ax
; 显示姓名
mov di, 0
mov cx, 18
mov si, name
cld
rep movsb
; 计算姓名和学号的ASCII值总和并显示
mov bx, 0
mov di, name
mov cx, 18
calc_sum:
lodsb
add bl, al
loop calc_sum
mov ah, 0
mov al, bl
mov bx, 10
div bx
add al, '0'
mov bh, 0
mov bl, 0x0f
int 10h
mov al, ah
add al, '0'
mov bh, 0
mov bl, 0x0f
int 10h
; 无限循环,以保持程序不会退出
jmp $
name db 'ZhangYanqing 1204108017'
times 510-($-$$) db 0
dw 0xaa55
```
该程序使用汇编语言编写,实现了在计算机屏幕上显示姓名拼音和学号,并计算出所有字符的ASCII值的总和,并以十进制形式显示出来。
程序首先使用`org`指令将程序的起始地址设置为0x7c00,这是在计算机启动时加载引导扇区的内存地址。
接下来,程序将显存起始地址加载到`es`寄存器中,该寄存器用于在之后的指令中访问显存。
然后,程序使用`mov`指令将字符串的起始地址存储到`si`寄存器中,并使用`rep movsb`指令将字符串从`si`指定的源地址复制到`di`指定的显存地址中,从而在计算机屏幕上显示出姓名拼音和学号。
接着,程序使用`lodsb`指令将字符串中的每个字符加载到累加器中,并使用`add`指令将它们相加以计算总和。程序使用`loop`指令来循环处理每个字符,并将计算结果存储到`bl`寄存器中。
接下来,程序使用`div`指令将计算结果除以10,以便将结果以十进制形式显示出来。程序使用`add`指令将余数加上字符0,并使用`int 10h`指令将结果显示到屏幕上。
最后,程序使用`jmp`指令来无限循环,以保持程序不会退出。
需要注意的是,在mbr程序中,程序必须以0xaa55结尾,以表示这是一个引导扇区。因此,程序使用`dw`指令声明一个字(即两个字节)的数据,将0xaa55存储到这个位置。
总体来说,该程序通过使用汇编语言来操作计算机硬件,实现了在计算机屏幕上显示字符、计算字符的ASCII值总和、以及将结果以十进制形式显示出来的功能。
阅读全文