编写一个MBR程序,在计算机屏幕显示自己的姓名拼音,拼音后紧跟学号,并计算出上述字符的ASCII值的总和并以十进制形式显示出来。
时间: 2024-02-27 09:51:28 浏览: 182
很抱歉,我无法编写代码,但我可以为你提供实现该功能的步骤:
1. 打开任意文本编辑器,新建一个文件。
2. 将以下代码复制到文件中:
```
org 0x7c00 ; MBR程序必须从0x7c00地址开始
bits 16 ; 设置代码为16位模式
jmp entry ; 跳转到程序入口点
msg db 'Your Name Pinyin and Student ID: ' ; 你的姓名拼音和学号
name db 'Your Name Pinyin' ; 你的姓名拼音
id db 'Your Student ID' ; 你的学号
entry:
mov si, msg ; 将msg的地址存储在si中
call print_string ; 调用print_string函数打印msg
mov si, name ; 将name的地址存储在si中
call print_string ; 调用print_string函数打印name
mov si, id ; 将id的地址存储在si中
call print_string ; 调用print_string函数打印id
mov si, msg ; 将msg的地址存储在si中
call ascii_sum ; 调用ascii_sum函数计算ASCII值总和
jmp $ ; 无限循环
print_char:
mov ah, 0x0e ; 设置AH寄存器为0x0e,表示显示一个字符
int 0x10 ; 调用BIOS中断显示字符
ret ; 返回调用函数之前的位置
print_string:
mov ah, 0x0e ; 设置AH寄存器为0x0e,表示显示一个字符
.loop:
lodsb ; 从si指向的地址处读取一个字节
cmp al, 0 ; 如果al为0,则字符串已经显示完毕
je .done
call print_char ; 调用print_char函数显示字符
jmp .loop
.done:
ret ; 返回调用函数之前的位置
ascii_sum:
xor cx, cx ; 将cx寄存器清零,用于计数
xor ax, ax ; 将ax寄存器清零,用于累加ASCII值总和
.loop:
lodsb ; 从si指向的地址处读取一个字节
cmp al, 0 ; 如果al为0,则字符串已经计算完毕
je .done
add ax, ax ; 将ax寄存器中的值乘以2
add ax, cx ; 将cx寄存器中的值加到ax寄存器中
mov cl, al ; 将al寄存器中的值存储在cl寄存器中,用于下一次累加
jmp .loop
.done:
mov si, ax ; 将ax寄存器中的值存储在si寄存器中,用于显示
mov ax, 0x0e ; 将ax寄存器设置为0x0e,表示显示一个字符
int 0x10 ; 调用BIOS中断显示字符
ret ; 返回调用函数之前的位置
```
3. 在文件中修改 "Your Name Pinyin" 和 "Your Student ID" 为你自己的姓名拼音和学号。
4. 保存文件,并将文件名命名为 "mbr.asm"。
5. 打开命令提示符,切换到文件所在目录。
6. 输入以下命令编译程序:
```
nasm -f bin -o mbr.bin mbr.asm
```
7. 输入以下命令将程序写入硬盘:
```
dd if=mbr.bin of=/dev/sda bs=512 count=1
```
请注意,这会将程序写入硬盘的第一个扇区,这可能会导致数据丢失。请谨慎操作,自行承担风险。
阅读全文