基于8086,用汇编实现如下功能: 1、编写程序向内存区域写入26个小写字母accii码值。2、读出第1步写入的值,回写成大写字母的accii码值。
时间: 2024-03-12 21:48:06 浏览: 22
下面是基于8086的汇编代码,实现了将26个小写字母的ASCII码值写入内存,然后将其转换为对应的大写字母的ASCII码值并回写的功能:
```
org 100h ; 程序入口地址
section .data
lower db 'abcdefghijklmnopqrstuvwxyz' ; 26个小写字母
upper db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; 26个大写字母
section .text
mov ax, 0x07C0 ; 将代码段地址存入AX寄存器
add ax, 288 ; 将数据段地址存入AX寄存器
mov ds, ax ; 将DS寄存器值设置为数据段地址
mov cx, 26 ; 设置计数器为26,循环26次
mov si, 0 ; 将SI寄存器值设为0,指向小写字母数组
mov di, si ; 将DI寄存器值设为SI寄存器值,指向大写字母数组
; 将小写字母写入内存
mov ah, 0x0E ; BIOS中断函数号,用于在屏幕上输出字符
mov bh, 0 ; 页号,通常为0
mov bl, 0x07 ; 字符属性,用于指定字符颜色
write_loop:
lodsb ; 从SI指向的内存地址读取一个字节,并将指针SI增加1
int 0x10 ; 调用BIOS中断函数,在屏幕上输出字符
mov [di], al ; 将读取的字节写入DI指向的内存地址
add di, 1 ; 将指针DI增加1
loop write_loop ; 循环
; 将小写字母转换为大写字母
mov cx, 26 ; 重新设置计数器为26,循环26次
mov si, 0 ; 将SI寄存器值设为0,指向小写字母数组
mov di, si ; 将DI寄存器值设为SI寄存器值,指向大写字母数组
upper_loop:
lodsb ; 从SI指向的内存地址读取一个字节,并将指针SI增加1
cmp al, 'a' ; 比较读取的字节是否为小写字母a
jb next ; 如果小于a,则跳到下一步
cmp al, 'z' ; 比较读取的字节是否为小写字母z
ja next ; 如果大于z,则跳到下一步
sub al, 32 ; 将小写字母转换为大写字母
mov [di], al ; 将转换后的字节写入DI指向的内存地址
add di, 1 ; 将指针DI增加1
next:
loop upper_loop ; 循环
; 程序结束,无限循环
cli ; 关闭中断
hlt ; 暂停CPU执行
times 510-($-$$) db 0 ; 填充剩余空间
dw 0xAA55 ; 签名,用于标记引导扇区
```
该程序将26个小写字母的ASCII码值写入内存,然后将其转换为对应的大写字母的ASCII码值并回写。