编写一个可以在emu8086上运行的MBR程序,在计算机屏幕显示“21210929zhouhe”并计算出上述字符的ASCII值的总和并以十进制形式显示出来。
时间: 2024-03-20 08:44:43 浏览: 102
以下是一个可以在emu8086上运行的MBR程序,实现了你所要求的功能:
```
org 0x7c00 ; MBR程序的起始地址
start:
mov ax, 0xb800 ; 将显存的段地址存入ax寄存器
mov es, ax ; 将ax寄存器的值存入es寄存器
mov si, msg ; 将消息字符串的地址存入si寄存器
mov cx, 10 ; 将字符串长度存入cx寄存器
; 在屏幕上显示消息字符串
mov ah, 0x0f ; 设置字符属性为白底黑字
showchar:
lodsb ; 从si寄存器指向的内存地址中读取一个字符到al寄存器
mov word [es:di], ax ; 将字符和字符属性写入显存
add di, 2 ; 更新显存指针
loop showchar ; 循环显示字符,直到字符串结束
; 计算并显示ASCII值的总和
xor ax, ax ; 将ax寄存器清零
mov si, msg ; 将消息字符串的地址存入si寄存器
mov cx, 10 ; 将字符串长度存入cx寄存器
calcsum:
lodsb ; 从si寄存器指向的内存地址中读取一个字符到al寄存器
add ah, al ; 将al寄存器中的值加到ah寄存器中
loop calcsum ; 循环计算字符的ASCII值的总和,直到字符串结束
; 将ASCII值的总和以十进制形式显示出来
mov ah, 0x0f ; 设置字符属性为白底黑字
mov si, decimal ; 将十进制标志字符串的地址存入si寄存器
mov cx, 6 ; 将标志字符串长度存入cx寄存器
showdecimal:
lodsb ; 从si寄存器指向的内存地址中读取一个字符到al寄存器
mov word [es:di], ax ; 将字符和字符属性写入显存
add di, 2 ; 更新显存指针
loop showdecimal ; 循环显示字符,直到字符串结束
mov ax, 0x4c00 ; 将程序结束的标志存入ax寄存器
int 0x21 ; 调用DOS中断,结束程序
msg db "21210929zhouhe", 0 ; 消息字符串,以0结尾
decimal db "Sum: ", 0 ; 十进制标志字符串,以0结尾
```
程序执行过程如下:
1. 将显存的段地址存入ax寄存器。
2. 将ax寄存器的值存入es寄存器,以便后续访问显存。
3. 将消息字符串的地址存入si寄存器,字符串长度存入cx寄存器。
4. 设置字符属性为白底黑字,并循环显示字符,直到字符串结束。
5. 将ax寄存器清零,将消息字符串的地址存入si寄存器,字符串长度存入cx寄存器。
6. 循环计算字符的ASCII值的总和,直到字符串结束。
7. 将十进制标志字符串的地址存入si寄存器,字符串长度存入cx寄存器。
8. 设置字符属性为白底黑字,并循环显示字符,直到字符串结束。
9. 调用DOS中断,结束程序。
在程序执行完毕后,计算出的ASCII值的总和以十进制形式显示在屏幕上。
阅读全文
相关推荐















