
你说的执行int 21h后sp怎么变吧,执行int 21h后IP变为0000H。
int21H是DOS功能调用,有近上百个功能如01H、07H和08H—从标准输入设备输入字符02H—字符输出03H—辅助设备的输入04H—辅助设备的输出05H—打印输出06H—控制台输入/输出09H—显示字符串0AH—键盘缓冲输入0BH—检测输入状态0CH—清输入缓冲区的输入功能。
所以,调用INT21H后当然还会执行程序但4C是结束程序,也就是说当AH=4CH,调用INT21H后,程序就结束了,后面的就不会执行了。
将片内RAM的20H,21H,22H单元的内容依次存入片外RAM的20H,21H,22H中:
MOV R0,#20H
MOV R1,#03H;用于控制循环次数
MOV DPTR,#20H
LOOP:
MOV A, @R0
MOVX @DPTR , A
INC R0;片内RAM地址加一
INC DPTR;外部RAM地址加一
DJNZ R1,LOOP;未循环完3次,跳回继续移数值
SJMP $;停止
END
编程将片外RAM的1000H单元开始的100个字节的数据相加,结果存放于R7R6中:
MOV R6, #0
MOV R7, #0
CLR C;必须先将CY(进位标志)清零
MOV DPTR, #1000H
MOV R2, #100
LOOP:
MOVX A, @DPTR
ADD A, R6
MOV R6, A;存储低8位
JC ADD2;CY为一的话,跳转到ADD2,使R7加一(即低8位有进位的话,高8位要加一)
INC DPTR
DJNZ R1, LOOP
SJMP $
ADD2:
INC R7;R7存储高8位
RET
END
嘿嘿 俺有正确答案
楼上作的答案有问题呀 不可以使用减法指令 作比较的 减法指令执行时 将改变 *** 作数的数值
应该使用专用的比较指令 即 JCNE,A,direct,rel;
可以将20H定义成一个装最大数的单元即MAX单元。
参考程序如下:
MAX DATA 20H
ORG 0000H
JMP MAIN
ORG 0100H
MAIN: MOV R0,#21H
MOV R6,#20H
MOV A,@R0 ; 先将第一个数当成最大者,送给MAX单元
MOV MAX,A
LOOP: INC R0
MOV A,@R0
CJNE A,MAX,LL1
LL1: JNC LL2
MOV MAX,A; 将大数放入MAX单元保存
LL2: DJNE R6,LOOP
SJMP $
呵呵 满意 就给加分喽
以上就是关于执行int 21h后sp怎么变全部的内容,包括:执行int 21h后sp怎么变、试编一段程序,将片内RAM的20H,21H,22H单元的内容依次存入片外RAM的20H,21H,22H中。、在内部RAM的21H单元开始存有一组无符号数,数据长度为21H,编写程序,要求找出最大数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)