关于堆栈段的问题[汇编语言]
有些汇编程序答案里面没有定义 STACK SEGMENT
而有些程序答案里面却定义了
去网上搜索(得到的答案不尽人意-->有些说是调用int n时需要定义堆栈段,问题是有些题调用了int n却没有定义堆栈段,所以就很懵逼)
比如说这个题:
编程实现将键盘连续输入的小写字母用大写字母显示出来,中间用'-'分隔,当输入非小写字母时程序停止处理
参考答案:
STACK SEGMENT STACK ;定义堆栈段
DB 100DUP(?) ;开辟 100 个存储单元
STACK ENDS ;堆栈段结束
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,SS:STACK
START: MOV AH,01H ;1 号调用,从键盘输入一字符存入 AL
INT 21H ;输入并回显
MOV BL,AL ;保存从键盘输入字符
CMP AL,’a’ ;与“a”的 ASCII 码比较
JB L3 ;低于“a”的 ASCII 码,转 L3(退出)。
CMP AL,’z’ ;与“z”的 ASCII 码比较
JA L3 ;高于“a”的 ASCII 码,转 L3(退出)。
SUB AL,20H ;将 AL 中字符的 ASCII 码减去 20H 变成大写字母。
MOV BL,AL ;保存结果
MOV DL,‘-’ ;显示字符‘-’送 DL
MOV AH,02H ;2 号调用,在显示器上显示字符‘-’。
INT 21H ;显示‘-’
MOV DL,BL ;结果(大写字母)送 DL。
MOV AH,02H ;2 号调用,在显示器上显示 DL 中的内容(大写字母)。
INT 21H ;显示大写字母
MOV DL,20H ;空格送 DL。()
MOV AH,02H ;2号调用,在显示器上显示DL中的内容(大写字母) 。
INT 21H ;显示空格(使两结果用空格隔开)
JMP START ;不是“回车符”,转 START(继续)
L3: MOV AH,4CH ;是“回车符”,设置返回 DOS 功能码。
INT 21H ;返回 DOS
CODE ENDS ;代码段结束
END START ;程序汇编结柬
所以到底什么情况下需要定义STACK SEGMENT