微机原理debug循环程序设计汇编程序错在哪里

微机原理debug循环程序设计汇编程序错在哪里,第1张

楼主的程序有两个明显错误:

(1)第3行指令 MOV BH,00 使首行指令MOV BX,0100 作废,

        使 BX = 0000,导致后面的指令MOV AL,[BX]读入AL的不是成绩数据。

(2)在DEGUG 环境输入程序,数值不加后缀H,默认为16进数,

         例如楼主程序中的 CMP AL,60,其中60默认为16进制数,即96D,

         导致统计结果错误。

我修改的程序及运行结果如以下截图所示,供参考:

:对于给定字符的每一个字符,检查它是否是数字或大写字母,是则作相应处理,不是则继续读下一个.由此可以看出字符串什么时候结束得有限定条件,可以将字符串长度保存在寄存器或存储器中,也可设字符串以特定字符结束,通常以0结束.为了不和别人重复,设长度保存在前面的单元中.

DATAS SEGMENT

STRLEN DB 6

STR DB "38A4CE"

DATAS ENDS

编程时进行

1 设指针指向第一个字符,CX为循环次数

2 读当前指向字符

3 是数字么,是则替换为#

4 是大写字母么,是则改为小写

4 指针加1

5 LOOP 第2步

是数字或是大写字母可用函数表示

以下附代码:

DATAS SEGMENT

STRLEN DW 6

STR DB "38A4CE",13,10,'$'

DATAS ENDS

STACKS SEGMENT

DB 100 DUP (0)

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX

MOV DX,OFFSET STR

MOV AH,9

INT 21H显示修改前的字符串

MOV CX,[STRLEN]字符串长度值送CX控制循环次数

MOV SI,OFFSET STRSI指向第一个字符

ABC:MOV AL,BYTE PTR [SI]读当前指向字符

CALL IS0_9是数字么?

JC NEXT1

MOV BYTE PTR [SI],'#'CF=0表示是0-9

JMP AG

NEXT1:CALL ISA_Z是大写字母么?

JC AG

ADD BYTE PTR [SI],20HCF=0表示是A-Z

AG: INC SI

LOOP ABC

MOV AH,9

MOV DX,OFFSET STR

INT 21H显示修改后的字符串

MOV AH,4CH

INT 21H

入口参数:AL为待比较字符

出口参数:如是0-9则CF=0,否则为1

IS0_9:

CMP AL,'0'

JB NOO

CMP AL,'9'

JA NOO

CLC

RET

NOO:STC

RET

入口参数:AL为待比较字符

出口参数:如是A-F则CF=0,否则为1

ISA_Z:

CMP AL,'A'

JB NOO1

CMP AL,'Z'

JA NOO1

CLC

RET

NOO1:STC

RET

CODES ENDS

END START

微机原理与接口技术LOOP NEXT意思是需要循环执行NEXT,直到中断程序的远返回。

采用查询方式,参考电路图编制程序,编写IRQ3和IRQ10的中断嵌套程序,每按一次单脉冲进行一次中断,屏幕上显示相应的中断请求号“IRQ3”或“IRQ10”。

进行IRQ10或者IRQ3中断 *** 作,在屏幕显示中断信息时,按下另一个脉冲按钮,进行中断,屏幕上中断信息会被打断,进而显示另一个中断类型的中断信息。

三态缓冲器是变化的值,不具有保持功能,适合加载到不断变化的总线上。而数据锁存器可以提供稳定的输出。

LOOP NEXT的原理:

I/O接口可以反映接口的状态,传输数据以及控制读写。CPU对外设的访问实际上是对I/O接口电路的端口访问,不同的端口可以是同一I/O地址(一个输入输出共用一个I/O地址)。

全地址译码,就是通过LS138把每个都选出来,不会出现遗漏,但是部分地址译码可能会出现地址重叠的情况,但是占用空间小。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11187250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存