一、实验要求
- 1.请独立完成作业。
- 2.请使用debug调试程序,这样不但可以查看运行结果,还能检查程序问题。
- 3.思考题需要用蓝色或者绿色作答。
二、实验内容
1.编写程序实现:
①从键盘输入一个小写字母,存储在数据段中;
②将其转换成大写字母后再次存储在数据段中(不能覆盖之前存储的小写字母);
③将大写字母输出。
思考1:debug调试程序,数据段起始物理地址和代码的起始物理地址分别是多少?
思考2:debug调试程序,未执行汇编指令前,DS的默认值是多少,有什么意义?
源程序(不要截图):
data segment
sto db ?,?
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
;键盘输入字符
mov ah,01h
int 21h
;转换字符 ,32的十六进制是20,大写转换成小写是加上32
sub al,20h
;显示的字符
mov dl,al
mov ah,02h
int 21h
mov dx,offset sto
mov ax,4c00h
int 21h
code ends
end start
思考1:debug调试程序,数据段起始物理地址:076A:0010
代码的起始物理地址分别是:076B:0000
思考2:debug调试程序,未执行汇编指令前,DS的默认值
是075A,从ds中可以的得到PSP的段地址,PSP的地址为
075A:0000,程序的地址为075A:0000
2.设置数据段大小至少为10个字节,数据全0;在代码段中编写程序,使用loop循环,将十进制数据48,49,50,51,52,53,54,55,56,57存储在数据段中,覆盖之前存储的全0。再使用loop循环,将上述数据当做ASCII码输出。思考3:debug调试程序,数据段起始物理地址和代码的起始物理地址分别是多少?数据段和代码段之间有间隔吗?如果有,这些间隔可以使用吗?
提示:
- 数据段设置三步曲是?
- 数据段设置多大?其标签的属性是字节还是字?
- bx设置成什么值,可以使用[bx]访问数据段?
- 变化的十进制数据(48,49,50…)存储在哪个寄存器,再用那个寄存器的数值放入数据段中,对程序没有影响?
源程序(不要截图):
Data segment
da DB 16 DUP(10)
str dw 48,49,50,51,52,53,54,55,56,57
Data ends
assume cs:code , ds:data
code segment
start:
mov ax , data
mov ds , ax
mov ax, str
mov bx,offset str
mov cx,9
s: mov bx,0
add ax,bx
loop s
mov str,ax
mov ax,4c00h
int 21h
code ends
end start
思考3:
debug调试程序,数据段起始物理地址:076A:0010
代码的起始物理地址076D:0000,数据段和代码段之间有间隔,
这些间隔应该不可以使用
3.改编第2题。将代码段中设置ds的指令删除。
思考4:猜测程序能成功生成可执行文件吗?猜测程序能成功运行吗?请验证猜测是否正确。
思考5:debug下,执行相关代码后,十进制数据48,49,50…有没有被放入数据段中?若没有,那么放在哪里了?
源程序(不要截图):
Data segment
da DB 16 DUP(10)
str dw 48,49,50,51,52,53,54,55,56,57
Data ends
assume cs:code , ds:data
code segment
start:
;mov ax , data
;mov ds , ax
mov ax, str
mov bx,offset str
mov cx,9
s: mov bx,0
add ax,bx
loop s
mov str,ax
mov ax,4c00h
int 21h
code ends
end start
debug下,执行相关代码后,十进制数据48,49,50…有没有被放入数据段中
思考4:猜测程序能成功生成可执行文件;猜测程序能成功运行
思考5
:debug下,执行相关代码后,十进制数据48,49,50…没有被放入数据段中,放到PSP了
4.在数据段中预先存入自己的生日年月日(BCD码,例如2000h,0501h),和现在的年份(BCD码,例如2021h)。编写程序将数据段中存放的现在的年减去自己生日的年份后,将结果存放在数据段中。
数据段定义示例:
源程序(不要截图):
Data segment
sto dw 2001h,0525h,2021h,?
Data ends
assume cs:code , ds:data
code segment
start:
mov ax,data
mov ds,ax
mov ax,2021h
mov bx,2001h
mov cx,2021h
sub cl,al
mov dl,cl
mov bx, offset sto
mov ax,4c00h
int 21h
code ends
end start
【小小的记录一下,等待老师的讲解~今天的热干面挺好吃的,又买了黄瓜和香蕉,也算是补充水果啦!】
句子君:
“当我们努力使自己变得比现在更好的时候,
我们周围的一切也会变得更好。”