为什么在调用中断前,要给ah赋个值?

kyq9 2004-07-08 09:06:08
例如
mov al,1ch
mov ah,25h
int 21h
不明白为什么啊?
...全文
207 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly4free 2004-07-15
  • 打赏
  • 举报
回复
这是硬件设计的问题。
IBM-PC在响应(恩……,查看?)中断时,是要根据AH的值,也就是相应电路端点的高低电平来判断是哪个功能。

dunkel(内心和夜 哪个黑)
“用户自己设计了一个中断功能组”,怎么设计?还不是基于硬件的设计。当然,硬件逻辑也可抽象到软件上面……,这样说的话,所有的问题不都是软件问题?哈哈
wangziz 2004-07-14
  • 打赏
  • 举报
回复
35h是取中断向量
snowegale888 2004-07-09
  • 打赏
  • 举报
回复
good
dunkel 2004-07-09
  • 打赏
  • 举报
回复
fanxero(方舟二号) 上面的说法不完全对吧. 调用中断, 这里的中断应该是软中断了, 象是 int10h, int21h 等等这样的. 这样的中断, 往往是能够完成许多功能的, 如何来区别用户要实现的是哪个功能呢, 就是通过 AH 来判断的, 这就是所谓的功能号了. 把功能号置于 AH 中, 这只是个约定俗成的做法, 不是 "硬件这样设计的". 如果是用户自己设计了一个中断功能组的话, 它完全可以把功能号放到其他的寄存器里, 当然这样的做法在大家都已经习惯了在 AH 里时, 是否恰当就是另外一回事了. 实际上, 有些时候情况可能还要复杂些, 就是一个功能里面, 还可能包含更细的子功能, 象是 int21h 的 AH=44h 功能组, int10h 的 AH=0Bh 功能组等等. 这时, 除了要将功能号置于 AH 中之外, 还需要设置子功能号, 这时的做法各个中断就不完全一致了, 有放在 AL 中的, 有在 BH 中的, ...
以功能的类别来理解中断调用的参数设置, 主要是寄存器值的设置, 这样比较有条例些, 也容易理解. 虽然也可以笼统地以函数调用的参数来看, 但可能就不如前面的那种方法直观了.
SDFDSAC 2004-07-09
  • 打赏
  • 举报
回复
int是dos系统功能调用
ah里放的是功能号,就是具体调用哪个功能
你上面的就是调用25号功能(设置中断向量)
al里放的是调用参数
fanxero 2004-07-08
  • 打赏
  • 举报
回复
在C语言中,假如你定义了一个函数void fun(int a),整型变量a就是函数fun的参数。参数是处理的对象。
汇编语言调用中断服务程序,也需要给它参数,放ah里的值就是传给中断服务程序的参数,对于同一个中断不同的参数值代表不同的处理。放ah里的值所代表意义不直观,没什么为什么,硬件这样设计的。为什么要放ah里是还是因为硬件的设计这样做,完全可以设计为放在其它寄存器里。
kyq9 2004-07-08
  • 打赏
  • 举报
回复
tankbattle(坦克大战) 老兄能讲的详细点吗?
tankbattle 2004-07-08
  • 打赏
  • 举报
回复
int21h是dos提供的一个软中断,已给用户提供通用的服务,就像win32api一样。ah的值是入口参数,就像我们调用函数的参数一样,只是传递的方式不同
关于8255单片机的程序设计 ;变量声明区 SECOND EQU 30H ;秒 MINUTE EQU 31H ;分 HOUR EQU 32H ;时 DAY EQU 33H ;日 MONTH EQU 34H ;月 YEAR_L EQU 35H ;年低位 YEAR_H EQU 36H ;年高位 DISPBUF EQU 37H ;显示缓冲区(6字节) DISPBIT EQU 3DH ;位选偏移量 FLAG EQU 3EH ;标记(0表示在主界面,1-6分别代表显示时、分、秒、年、月、日,0为一般显示(当位置为主界面),7为显示日期,8为显示闹铃开关,9、10显示闹铃时和分,11表示不做缓冲处理) KEY EQU 3FH ;按键值 CLOSE_BIT EQU 40H ;显示屏蔽(和位选相与后送P2) A1_MINUTE EQU 41H ;闹铃1 分钟 A1_HOUR EQU 42H ;闹铃1 小时 A1_SWITCH EQU 43H ;闹铃1 开关 A2_MINUTE EQU 44H ;闹铃2 分钟 A2_HOUR EQU 45H ;闹铃2 小时 A2_SWITCH EQU 46H ;闹铃2 开关 A3_MINUTE EQU 47H ;闹铃3 分钟 A3_HOUR EQU 48H ;闹铃3 小时 A3_SWITCH EQU 49H ;闹铃3 开关 FLAG_KEEP EQU 4AH ;闹钟持续鸣叫标志(1开启,0关闭) FLAG_ALARM EQU 4BH ;闹钟响标志(为1蜂鸣器响,为0蜂鸣器不响) FLAG_NUM EQU 4CH ;当闹钟标志(1-3个闹钟) FLAG_MOVING EQU 4DH ;流水显示初始化标志(0未初始化 1已经初始化) COUNT EQU 4EH ;T0中断次数(T0内部使用) COUNT_1S EQU 4FH ;计数1S(满N秒后执行程序) FLAG_1S EQU 50H ;满1秒取反标志(1秒执行程序1,另一秒执行程序2) FLAG_ADD EQU 51H ;时间设置标记(1代表FLAG对应的时段加1) FLAG_CLOSE EQU 52H ;闪烁显示标记(为0不闪烁) DATE_STYLE EQU 53H ;日期显示模式标志(为1跳变切换显示,为2流水显示,为3下滑切换显示) CLOSE_BIT_TEMP EQU 54H ;屏蔽位暂存(流水显示模式) CLOSE_BIT_CODE EQU 55H ;段选屏蔽位(和段选相与后送P0) KEY_TEMP EQU 56H ;临时按键值(串口发送内容) COUNT_50MS EQU 57H ;50毫秒计数 TEMP_R0 EQU 58H ;保护R0 TEMP_R1 EQU 59H ;保护R1 TEMP_R2 EQU 5AH ;保护R2 FLAG_DOWN_S EQU 5BH ;下移显示阶段标志(每0.2s加1;0无显示,1、2移入显示,3-17正常,18、19移出显示) MOVING_DISPBUF EQU 5CH ;临时缓冲区(流水显示模式) ;---------------------------------------------------------------------------------------------- ;主程序 ORG 00H SJMP START ORG 0BH LJMP INT_T0 ORG 13H AJMP INT_1 ORG 30H START: ;初始化 MOV SECOND,#00 MOV MINUTE,#42 MOV HOUR,#02 MOV DAY,#09 MOV MONTH,#12 MOV YEAR_L,#09 MOV YEAR_H,#20 MOV A1_SWITCH,#00H MOV A1_MINUTE,#22 MOV A1_HOUR,#12 MOV A2_SWITCH,#00H MOV A2_MINUTE,#00H MOV A2_HOUR,#00H MOV A3_SWITCH,#00H MOV A3_MINUTE,#00H MOV A3_HOUR,#00H MOV DISPBIT,#00H MOV FLAG_KEEP,00H MOV P3,#0FH ;键盘进入监控输入状态 MOV R7,#00H ;整点报时鸣铃次数清0 S

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧