解释用mbr语言 编写一个MBR程序,在计算机屏幕显示自己的姓名拼音,拼音后紧跟学号,并计算出上述字符的ASCII值的总和并以十进制形式显示出来
时间: 2024-03-04 19:53:33 浏览: 83
当计算机启动时,它会读取硬盘的第一个扇区,也就是主引导记录(MBR),并将其加载到内存中的0x7c00处。因此,我们可以编写一个MBR程序,将其放在第一个扇区,以在计算机启动时运行我们的程序。
这个程序的主要任务是在屏幕上显示姓名拼音和学号,并计算这些字符的ASCII值的总和。在具体实现中,我们使用了BIOS中断来控制屏幕的输出和键盘输入,并使用汇编语言的指令来计算字符的ASCII值总和。
具体来说,程序首先使用`org 0x7c00`指令告诉汇编器,我们的程序将被加载到0x7c00处,并从该地址开始执行。然后,我们使用`mov`指令来设置打印模式,并使用`int 0x10`指令调用BIOS中断来打印姓名拼音和学号。接下来,我们使用`mov`指令将程序的起始地址存储在bx寄存器中,并使用循环来遍历所有字符,并将其ASCII值加到dx寄存器中。最后,我们将dx寄存器中的值转换为十进制,并使用`int 0x10`指令调用BIOS中断以在屏幕上打印结果。
请注意,MBR程序是非常基础的,它只有512字节大小,因此程序需要非常精简和高效。这就要求我们在编写程序时要非常小心,并充分测试程序以确保它能够正确地运行。
相关问题
用mbr语言 编写一个MBR程序,在计算机屏幕显示自己的姓名拼音,拼音后紧跟学号,并计算出上述字符的ASCII值的总和并以十进制形式显示出来
好的,我能理解你的问题。以下是一个简单的MBR程序,它可以在计算机屏幕上显示你的姓名拼音和学号,并计算这些字符的ASCII值的总和:
```
org 0x7c00 ; 告诉汇编器这是一个MBR程序,并将其加载到0x7c00处
mov ah, 0x0e ; 设置打印模式
mov al, 'X' ; 打印你的姓名拼音
int 0x10 ; 调用BIOS中断打印字符
mov al, 'X'
int 0x10
mov al, 'X'
int 0x10
mov al, 'X'
int 0x10
mov al, '1' ; 打印你的学号
int 0x10
mov al, '2'
int 0x10
mov al, '3'
int 0x10
mov al, '4'
int 0x10
mov al, '5'
int 0x10
mov al, '6'
int 0x10
mov bx, 0x7c00 ; 将bx指向程序的起始地址
mov cx, 18 ; 设置要计算的字符总数为18
mov dx, 0 ; 初始化结果寄存器
sum_loop:
add dl, byte [bx] ; 将当前字符的ASCII值加到dx寄存器中
inc bx ; 将bx指向下一个字符
loop sum_loop ; 重复执行,直到所有字符都被处理
mov ah, 0x0e ; 设置打印模式
mov al, ' ' ; 打印一个空格
int 0x10
mov al, 'A' ; 将结果转换为十进制并打印
add dl, 144 ; 将寄存器值加上144,以将其转换为ASCII字符
int 0x10
mov al, 'S'
add dl, 144
int 0x10
mov al, 'C'
add dl, 144
int 0x10
mov al, 'I'
add dl, 144
int 0x10
mov al, 'I'
add dl, 144
int 0x10
mov al, ':'
int 0x10
mov ah, 0 ; 设置中断号为0x10,功能为获取键盘输入
int 0x16 ; 等待用户按下任意键
jmp $ ; 无限循环
times 510-($-$$) db 0 ; 填充剩余的空间,使程序大小为512字节
dw 0xaa55 ; MBR标识
```
请注意,本程序只是一个示例,并且未经过充分测试。在实际使用中,您需要进行适当的测试和错误处理,以确保程序可以正确地运行。
用mbr语言写 编写一个MBR程序,在计算机屏幕显示自己的姓名拼音,拼音后紧跟学号,并计算出上述字符的ASCII值的总和并以十进制形式显示出来
下面是在mbr语言下编写的程序:
```
org 7c00h
start:
mov ax, 0b800h
mov es, ax
mov di, 0
mov cx, 18
mov si, name
cld
rep movsb
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
```
这个程序将姓名拼音“ZhangYanqing”和学号“1204108017”打印到计算机屏幕上,并计算出其中所有字符的ASCII值的总和,最后以十进制形式显示出来。程序首先将屏幕显存的地址加载到es寄存器中,并使用字符串传送指令将姓名拼音和学号复制到显存中。然后,程序使用lodsb指令将字符串中的每个字符加载到累加器中,并将它们相加以计算总和。接着,程序将总和以十进制形式显示出来。最后,程序使用jmp指令来无限循环,以保持程序不会退出。
需要注意的是,在mbr程序中,程序必须以0xaa55结尾,以表示这是一个引导扇区。因此,程序使用dw指令声明一个字(即两个字节)的数据,将0xaa55存储到这个位置。另外,由于学号的长度为10,需要将程序中的cx值从15改为18。
阅读全文