编写代码,要求如下:实验题目1:编写一个MBR程序,在计算机屏幕显示自己的姓名拼音,拼音后紧跟学号,并计算出上述字符的ASCII值的总和并以十进制形式显示出来。
时间: 2024-03-02 17:48:45 浏览: 116
好的,我可以为您提供一份简单的汇编代码来实现这个功能。以下是代码:
```assembly
org 0x7c00 ; MBR程序从0x7c00地址开始执行
section .text
; 显示自己的姓名拼音
mov ah, 0x0e ; BIOS中断0x10的功能号
mov al, 'W' ; W的ASCII码为87
int 0x10
mov al, 'A' ; A的ASCII码为65
int 0x10
mov al, 'N' ; N的ASCII码为78
int 0x10
mov al, 'G' ; G的ASCII码为71
int 0x10
mov al, 'J' ; J的ASCII码为74
int 0x10
mov al, 'I' ; I的ASCII码为73
int 0x10
mov al, 'E' ; E的ASCII码为69
int 0x10
mov al, ' ' ; 空格的ASCII码为32
int 0x10
mov al, '1' ; 学号中的数字1的ASCII码为49
int 0x10
mov al, '5' ; 学号中的数字5的ASCII码为53
int 0x10
mov al, '1' ; 学号中的数字1的ASCII码为49
int 0x10
mov al, '8' ; 学号中的数字8的ASCII码为56
int 0x10
mov al, '0' ; 学号中的数字0的ASCII码为48
int 0x10
mov al, '1' ; 学号中的数字1的ASCII码为49
int 0x10
mov al, '0' ; 学号中的数字0的ASCII码为48
int 0x10
mov al, '2' ; 学号中的数字2的ASCII码为50
int 0x10
; 计算字符的ASCII值的总和
mov cx, 16 ; 字符串长度(包括空格和数字)
mov bx, 0 ; 用于累加ASCII值的总和
mov si, 0x7c00 ; 字符串的起始地址
loop_start:
mov al, [si] ; 将当前字符的ASCII码读入al
add bx, ax ; 累加到总和中
inc si ; 指向下一个字符
loop loop_start ; 继续处理下一个字符
; 显示ASCII值的总和(十进制形式)
mov ah, 0x0e ; BIOS中断0x10的功能号
mov al, 'A' ; 显示提示信息“A=”
int 0x10
mov al, '='
int 0x10
mov al, ' '
int 0x10
mov ax, bx ; 将ASCII值的总和读入ax
mov cx, 0 ; 用于存储位数的计数器
mov bx, 10 ; 除数为10
decimal_conversion:
xor dx, dx ; 将dx清零
div bx ; ax除以10,商在al中,余数在ah中
push dx ; 将余数压入栈中
inc cx ; 位数计数器加1
test ax, ax ; 如果ax=0,则已经转换完成
jnz decimal_conversion ; 否则继续转换
display_digit:
pop dx ; 将栈顶元素弹出到dx中
add dl, '0' ; 将余数转换为ASCII码
mov ah, 0x0e ; BIOS中断0x10的功能号
mov al, dl ; 显示当前位的ASCII码
int 0x10
loop display_digit ; 继续显示下一位
times 510-($-$$) db 0 ; 填充剩余空间
dw 0xaa55 ; MBR的结束标志
```
您可以使用任何汇编编译器将其编译为二进制文件,并将其写入计算机的引导扇区(通常是第一个扇区,即0号扇区)。请注意,这将会覆盖引导扇区中原有的内容,因此请务必备份原有的引导扇区数据。启动计算机后,您应该能够看到屏幕上显示您的姓名拼音和学号,以及它们的ASCII值的总和。
阅读全文