汇编复习(从键盘上输入10个字符并按顺序存放在存储单元中;然后按逆向顺序在显示器上输出(利用堆栈“先进后出”的特点来实现)

先上代码
SSEG	SEGMENT PARA STACK'STACK'   ;定义堆栈段
	DW 256 DUP(?)
SSEG	ENDS

CSEG	SEGMENT
	ASSUME CS:CSEG,SS:SSEG
START:
	MOV	AX,SSEG						;将堆栈段的地址给SS
	MOV	SS,AX						
	MOV	CX,10						;设置循环次数
READ:
	MOV  AH,01					 ;01号中断,可以从键盘输入一个一个字符并存在AL中
	INT	21H						
	PUSH 	AX					;入栈,入栈的必须是字
	LOOP	READ				;循环READ
	MOV	CX,10               	;重新设置循环次数
DISP:
	POP	DX						;出栈,出栈的也必须是字
	MOV	AH,02H					;02号中断,输出DL一个字符
	INT	21H
	LOOP 	DISP				;循环DISP 一次出栈
	MOV	AH,4CH
	INT	21H
CSEG	ENDS
	END	START
需要时倒序输出,正好堆栈这种数据结构可以满足,因此我们只要将从键盘得到的数据一次入栈,然后出栈的时候因为从栈顶开始,此时设置好循环次数依次出栈并保存到DX直接输出就可以了
下面我们尝试用debug 来查看堆栈段的数据 是不是和我们输出的一致
特别说明一下如果程序里面输入的 按T进行单步执行的时候,遇到输出很自动跳出来,然后直接输入按回车就好了
我们先连续执行t 命令 输出两个参数(这里我输入R和W)

在这里插入图片描述
在这里插入图片描述

我们知道堆栈入栈SP会先减2 出栈则是先弹出SP再减2 因此堆栈段地址肯定和SP有关 so。。。。

-d ss:01f0

在这里插入图片描述

可以看到 R和W在01FE和01FC的位置上,中间有空时因为sp每次加减都是2

现在我们学一下 -a 命令

-a就是让我们可以在debug里面输入命令 这样我们不需要新建asm文件,方便我们做一些简单的小验证

在这里插入图片描述

输入-a 前面xxxx:xxxx是自动出现 我们在其后写指令就好,结束后连续两次回车即可退出

-u 077b:0000 (如果你是debug一个程序的时候输入-a就要在后面加上地址,不然出来的结果是所debug的那个程序的 而不是你-a之后的程序。-a之后第一排的数字便是地址)

在这里插入图片描述

-d 077b:0000(同上)

在这里插入图片描述

我们直接 输入debug然后-a 输入指令

在这里插入图片描述

-a xxxx:xxxx 后面可以接地址
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值