博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言-实验10 代码段、堆栈段和数据段
阅读量:3969 次
发布时间:2019-05-24

本文共 2989 字,大约阅读时间需要 9 分钟。

一、实验要求

  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 $-stostack endscode segmentassume cs:code,ss:stackstart:	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 21hcode endsend 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,57stack endscode segmentassume cs:code,ss:stackstart:	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 21hcode endsend start

堆栈中存放的字符(截图):

d ss:0
在这里插入图片描述

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

步骤要求:

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

源程序:

data segment             str db 'chenbinbin',20h,'hunanshenghengyangshi',20h             num dw $data endscode 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 21hcode endsend start

结果(截图。截图不能显示闪烁效果):

在这里插入图片描述

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

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

转载地址:http://eycki.baihongyu.com/

你可能感兴趣的文章
DB2 物化查询表
查看>>
IF 语句
查看>>
循环语句
查看>>
DB2 临时表
查看>>
ITERATE、LEAVE、GOTO和RETURN
查看>>
异常处理
查看>>
存储过程
查看>>
动态SQL(Dynamic SQL)
查看>>
在存储过程之间传递数据
查看>>
迁移存储过程
查看>>
GET DIAGNOSTIC 语句
查看>>
Python 简介
查看>>
Python 注释
查看>>
Python 变量
查看>>
Python 数据类型 -- 数字
查看>>
Spring 管理对象
查看>>
Spring 自定义对象初始化及销毁
查看>>
Spring Batch 环境设置
查看>>
字符组转译序列
查看>>
字符转译序列
查看>>