序言:纸上得来终觉浅,觉知此事要恭行!
为了应付考试学汇编,纸上做题时眼高手低,一看就思路来了,感觉没意思,心想要机器上来实战,一实战,出现问题了,而且,到处都是问题
针对这个题目,我准备分成好几篇文章给大家详细讲解,或许你会觉得这么简单的一道题,直接......,你实战以下就知道了!
要求十个数的最大值,首先,我们要有能力把这十个数挨个从内存中给取出来,并且查看是否成功
我们先实验从内存中拿三个数
DATA SEGMENT
DATABASE DB 99H,56H,78H ;内存中的三个数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,3 ;设置循环次数
MOV BX,OFFSET DATABASE ;获得变量的首地址
INIT_DATA:
MOV DL,BYTE PTR DS:[BX] ;挨个得到三个数据,并且一次放入dl寄存器用debug验证是否成功
INC BX
LOOP INIT_DATA ;循环这么写是为了解决标号子程序结束后
MOV AH,4CH ;返回不了原程序(中断和CALL RET除外)
INT 21H
CODE ENDS
END START
特别提醒:
1.尽量使用ds:[bx] 寄存器间接寻址 方式,本人在自己机器上用寄存器直接寻址方式一直出错
2.数据段定义变量时,变量名代表数据首地址,但是在代码段中变量名代表其首地址指向的那个数据,若需要求出首地址,需用offset伪指令或lea硬指令
执行结果: