汇编语言-实验7 程序加载数据段和代码段,loop

一、实验要求

  • 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:猜测程序能成功生成可执行文件;猜测程序能成功运行

思考5debug下,执行相关代码后,十进制数据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

【小小的记录一下,等待老师的讲解~今天的热干面挺好吃的,又买了黄瓜和香蕉,也算是补充水果啦!】
句子君:
“当我们努力使自己变得比现在更好的时候,
我们周围的一切也会变得更好。”

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年游四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值