利用8086,用汇编语言 1、编写程序向内存区城写入26个小写字母ascii码值。 2、读出第1步写入的值,回写成大写宇母的ascii码值
时间: 2024-03-12 16:47:56 浏览: 54
以下是利用8086汇编语言编写的程序,实现向内存区域写入26个小写字母ASCII码值,并将其转换为大写字母的ASCII码值。
```assembly
ORG 100h ; 程序从100h处开始执行
section .data
lowercase db "abcdefghijklmnopqrstuvwxyz" ; 存放小写字母ASCII码值的字符串
uppercase db "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; 存放大写字母ASCII码值的字符串
len equ $-lowercase ; 计算字符串长度
section .text
mov ax, 0B800h ; 将屏幕显存地址存入AX寄存器
mov es, ax ; 将显存地址存入ES寄存器
mov di, 0 ; DI寄存器用于指向显存地址
mov si, lowercase ; SI寄存器用于指向小写字母字符串地址
mov cx, len ; CX寄存器用于存放字符串长度
cld ; 清除方向标志位,确保字符串从左到右写入内存
; 将小写字母ASCII码值写入显存
mov ah, 07h ; 设置字符属性为白底黑字
rep stosw ; 重复执行将字母写入显存的操作
; 将小写字母ASCII码值读出并转换为大写字母ASCII码值
mov si, lowercase ; SI寄存器重新指向小写字母字符串地址
mov di, uppercase ; DI寄存器用于指向大写字母字符串地址
mov cx, len ; CX寄存器用于存放字符串长度
cld ; 清除方向标志位,确保字符串从左到右读写内存
; 逐个读取小写字母ASCII码值并转换为大写字母ASCII码值
convert_loop:
lodsb ; 读取SI指向的字母并存入AL寄存器
cmp al, 'a' ; 比较是否为小写字母
jb next_letter ; 如果不是小写字母则跳过
cmp al, 'z' ; 比较是否为小写字母z
ja next_letter ; 如果不是小写字母则跳过
sub al, 20h ; 将小写字母转换为大写字母
next_letter:
stosb ; 将转换后的字母存入DI指向的地址
loop convert_loop ; 循环直到所有字母都被转换
mov ah, 4Ch ; 设置程序结束的中断号
int 21h ; 调用DOS中断,结束程序
```
该程序先将26个小写字母的ASCII码值写入显存中,然后将小写字母的ASCII码值逐个读取并转换为大写字母的ASCII码值,并将其写入显存中。最后,程序调用DOS中断结束执行。
阅读全文