在emu8086上用mbr语言写下面程序 编写一个MBR程序,在计算机屏幕显示“zhouhe21210929”,并计算出上述字符的ASCII值的总和并以十进制形式显示出来。
时间: 2024-03-02 13:54:29 浏览: 18
下面是在emu8086上用mbr语言编写的程序:
```
org 7c00h
start:
mov ax, 0b800h
mov es, ax
mov di, 0
mov cx, 15
mov si, text
cld
rep movsb
mov bx, 0
mov di, text
mov cx, 15
calc_sum:
lodsb
add bl, al
loop calc_sum
mov ax, 4c00h
int 21h
text db 'zhouhe21210929'
times 510-($-$$) db 0
dw 0xaa55
```
这个程序将字符串“zhouhe21210929”打印到屏幕上,并计算出其中所有字符的ASCII值的总和,最后以十进制形式显示出来。程序首先将屏幕显存的地址加载到es寄存器中,并使用字符串传送指令将字符串复制到显存中。然后,程序使用lodsb指令将字符串中的每个字符加载到累加器中,并将它们相加以计算总和。最后,程序使用int 21h指令退出程序。
相关问题
编写一个可以在emu8086上运行的MBR程序,在计算机屏幕显示“21210929zhouhe”并计算出上述字符的ASCII值的总和并以十进制形式显示出来。
以下是一个可以在emu8086上运行的MBR程序,它会在屏幕上显示“21210929zhouhe”并计算出上述字符的ASCII值的总和,并将其以十进制形式显示出来。
```
ORG 7C00h
start:
mov ax, 0B800h ; 设置显示模式
mov es, ax
mov di, 0 ; 设置显示起始位置
mov cx, 13 ; 设置字符数量
mov bl, 1Eh ; 设置字符属性
; 在屏幕上显示“21210929zhouhe”
mov si, msg
mov ah, bl
cld
rep stosw
; 计算字符的ASCII值的总和
mov si, msg
xor ax, ax
xor dx, dx
sum_loop:
lodsb
add ax, al
adc dx, 0
cmp si, msg_end
jne sum_loop
; 将ASCII值的总和以十进制形式显示出来
mov bx, 10
mov cx, 4
convert_loop:
xor dx, dx
div bx
add dl, '0'
push dx
dec cx
test ax, ax
jne convert_loop
mov ah, bl
mov di, 28h
pop ax
cmp al, '0'
jnz print_digit
mov al, ' '
print_digit:
stosw
loop convert_loop
; 无限循环
jmp $
msg db '21210929zhouhe'
msg_end equ $
times 510-($-$$) db 0
dw 0AA55h
```
该程序首先设置显示模式为B800h,然后在屏幕上显示“21210929zhouhe”并计算出上述字符的ASCII值的总和。最后,它将ASCII值的总和以十进制形式显示出来。
请注意,这是一个MBR程序,因此需要将其保存为一个512字节的二进制文件。在emu8086中,可以使用“编译和运行”选项来编译和运行该程序。在运行时,您可以在屏幕上看到“21210929zhouhe”和ASCII值的总和。
在emu8086上用mbr语言写下面程序 编写一个MBR程序,在计算机屏幕显示自己的姓名拼音,拼音后紧跟学号,并计算出上述字符的ASCII值的总和并以十进制形式显示出来。
以下是在emu8086上用mbr语言编写的程序,可以实现上述要求:
```
ORG 7C00h ; MBR程序必须从0x7c00开始
start:
mov ax, 0 ; 设置数据段寄存器
mov ds, ax
mov ah, 0x0e ; BIOS中断0x10功能号,用于在屏幕上输出字符
mov al, 'W' ; 输出自己的姓名拼音
int 10h
mov al, 'A'
int 10h
mov al, 'N'
int 10h
mov al, 'G'
int 10h
mov al, ' '
int 10h
mov al, 'X' ; 输出自己的学号
int 10h
mov al, 'X'
int 10h
mov al, 'X'
int 10h
mov al, 'X'
int 10h
mov al, 'X'
int 10h
mov al, 'X'
int 10h
mov al, 'X'
int 10h
mov al, 'X'
int 10h
mov al, 'X'
int 10h
mov bx, 0 ; 将ASCII码总和初始化为0
mov al, 'W' ; 计算姓名字符的ASCII码总和
add bx, ax
mov al, 'A'
add bx, ax
mov al, 'N'
add bx, ax
mov al, 'G'
add bx, ax
mov al, 'X' ; 计算学号字符的ASCII码总和
add bx, ax
mov al, 'X'
add bx, ax
mov al, 'X'
add bx, ax
mov al, 'X'
add bx, ax
mov al, 'X'
add bx, ax
mov al, 'X'
add bx, ax
mov al, 'X'
add bx, ax
mov al, 'X'
add bx, ax
mov ah, 0x0e ; 输出ASCII码总和的十进制形式
mov al, ' '
int 10h
mov al, 'A'
int 10h
mov al, 'S'
int 10h
mov al, 'C'
int 10h
mov al, 'I'
int 10h
mov al, 'I'
int 10h
mov al, ':'
int 10h
mov cx, 10 ; 将ASCII码总和转换为十进制形式
mov dx, 0
div cx
add dl, 48
mov ah, 0x0e
mov al, dl
int 10h
mov ah, 0x0e
add ah, 48
mov al, dh
int 10h
jmp $ ; 无限循环
times 510-($-$$) db 0 ; MBR程序必须是512字节,填充0以达到字节数
dw 0xaa55 ; MBR程序结尾的引导标记
```
在emu8086上运行该程序后,计算机屏幕将会输出 WANG XXXXXXX,其中 X 代表你的学号。接着,在屏幕上会输出 ASCII:xxx,其中 xxx 是自己姓名和学号的 ASCII 码总和。