汇编语言-实验10 代码段、堆栈段和数据段

一、实验要求

  1. 1.请独立完成作业。
  2. 2.请使用debug调试程序,这样不但可以查看运行结果,还能检查程序问题。
  3. 3.思考题需要作答。

二、实验内容

1.设置堆栈段存储数据,利用loop循环,使用单个字符输出的形式输出Hello world!
步骤要求:

  • ①一种方法:设置独立的堆栈段,存储字符串Hello
    world!(使用db还是dw呢?)。另一种方法:在实验9第3题基础上修改,保留数据段的数据,增加堆栈段;将数据段数据入栈。第二种方法有三个段——数据段、堆栈段和代码段。
  • ②在代码段中使用loop循环,利用ah为2的系统功能调用(int 21h),将堆栈段中所有数据出栈(出栈的数据占几个字节?),当作ASCII码输出。

源程序:

stack segment
	sto db 'Hello world'
	num dw $-sto
stack ends
code segment
assume cs:code,ss:stack
start:
	mov ax,stack
	mov ss,ax
	mov sp,0
	mov cx,num
         s:     
                pop ax
	mov dx,ax
	mov ah,2h
	int 21h

	mov dl,dh
	mov ah,2h
	int 21h
	loop s

	mov ax,4c00h
	int 21h
code ends
end start

堆栈中存放的字符(截图):
在这里插入图片描述

2.设置堆栈段存储数据。在堆栈中存储十进制字型数据:48,49,50,51,52,53,54,55,56,57;使用loop循环,将这些数据分别出栈到寄存器DX中,使用INT 21H指令,将这些数据分别输出。若程序出错,请加大堆栈空间的大小。debug程序生成的exe文件。思考(不用作答):堆栈的起始物理地址是?你规划的堆栈的大小是?初始状态堆栈栈顶的物理地址是?出栈结束后,堆栈的栈顶物理地址是?代码的起始物理地址是?
源程序:

stack segment
	sto dw 48,49,50,51,52,53,54,55,56,57
stack ends
code segment
assume cs:code,ss:stack
start:
	mov ax,stack
	mov ss,ax
	mov sp,offset sto
	mov cx,10
         s:     
                pop dx
	mov ah,2h
	int 21h
	loop s

	mov ax,4c00h
	int 21h
code ends
end start

堆栈中存放的字符(截图):
d ss:0
在这里插入图片描述

3.阅读课本187页“根据材料编程”。在dosbox下,显示三行自己的名字和籍贯拼音,每行颜色不同,第三行字体闪烁。

步骤要求:

  • ①设置数据段,在数据段中存储自己名字和籍贯的拼音
  • ②显示缓冲区设置为附加段
  • ③第1行(可以从第2行或者第3行开始)的输出。计算本行起始偏移地址。设置好ah的值,用来控制字符颜色;使用循环——将数据段中的字符送入al,将ax送入附加段。
  • ④下一行的输出。计算本行起始偏移地址。其它同③
  • ⑤下一行的输出。同③和④

源程序:

data segment
             str db 'chenbinbin',20h,'hunanshenghengyangshi',20h
             num dw $
data ends
code segment 
assume  cs:code,ds:data
             
start:  
	mov ax,data
                mov ds,ax
                mov ax,0b800h
                mov es,ax           ;显示缓冲区设置为附加段
;******************************************************
                mov si,0
                mov di,140h        ;3行
                mov cx,num
                mov ah,01101101b            ;高字节黄底粉红色
s1:
                mov al,ds:[si]       ;低字节字符ASCII码
                mov es:[di],ax      ;送入显示缓冲区
                inc si
                inc di
                inc di
                loop s1
;***********************************************************
                mov si,0
                mov di,1e0h        ;4行
                mov cx,num
                mov ah,01110001b ;高字节 白底蓝色
s2:
                mov al,ds:[si]       ;低字节字符ASCII码
                mov es:[di],ax      ;送入显示缓冲区
                inc si
                inc di
                inc di
                loop s2
;***********************************************************
                mov si,0
                mov di,280h        ;5行
                mov cx,num
                mov ah,11000010b ;高字节红底闪烁绿色
s3:
                mov al,ds:[si]       ;低字节字符ASCII码
                mov es:[di],ax      ;送入显示缓冲区
                inc si
                inc di
                inc di
                loop s3
;***********************************************************
                mov ax,4c00h
                int 21h
code ends
end start

结果(截图。截图不能显示闪烁效果):
在这里插入图片描述

【至此,汇编语言的实验已经结束了,以后就是计算机组成原理的实验啦~今天吃了火锅,开森!(^▽ ^)】

“人都是从一开始相信全都是真的,慢慢开始觉得全都是假的,然后发现有真有假,最后无谓真假”

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

少年游四方

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

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

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

打赏作者

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

抵扣说明:

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

余额充值