【问题标题】:What does it mean by "MOV AH, 4CH" in assembly language?汇编语言中的“MOV AH, 4CH”是什么意思?
【发布时间】:2017-07-23 06:22:11
【问题描述】:

大部分汇编代码由以下指令终止

MOV AH, 4CH
INT 21H

“MOV AH, 4CH”是什么意思?

【问题讨论】:

  • 这里我要求“MOV AH, 4CH”,而不是 INT 21H。 “INT 21H”也随之而来。

标签: assembly dos x86-16 instructions


【解决方案1】:

MOV 代码如下:MOV Value1,Value2.
它将Value2 放入Value1。但是您不能将某些东西从变量移动到内存中的变量。 您可以像这样使用此代码:

  • 注册注册
  • 注册到内存
  • 要注册的内存

您编写的这段代码将4c 十六进制(=76 十进制)放入ah 寄存器。 你问我们为什么要这样做? 我们总是必须将一些数字(函数的编号)放入 ah 寄存器中 当我们使用中断时。

ah=4ch int 21h 上,程序将终止对 操作系统。(结束程序) 而int 21h是dos中断。例子:

ah=9h , dx=offset (string + '$') ,int 21h 。在光标位置写入字符串。

ah=6h,ch=起始行,cl=起始列,dh=结束行,dl=结束 列,al=行数,bh=属性,int 10h清除定义的区域并写入 属性。

ah=2h , dh=row,dl=column,bh=page number , int 10h

提示:显存分为 8 页(0 到 7)。我们在这个例子中使用的是 0 页面。

程序:

datasg segment para 'data'
    msg db 'Hello world$'
datasg ends
codesg segment para 'code'
    example proc far
        assume cs:codesg,ds:datasg    ;lead the assembler to know the segments.
        mov ax,datasg                 ;this is because ds cannot be vaulued directly.
        mov ds,ax                     ;move the data segment offset to its register.
        mov ah,6h
        mov al,25
        mov ch,0
        mov cl,0
        mov dh,24
        mov dl,79
        mov bh,0fh
        int 10h
        mov ah,2h
        mov dh,2
        mov dl,4
        mov bh,0
        int 10h
        mov ah,9h
        mov dx,offset msg
        int 21h
        mov ah,8h
        int 21h
        mov ah,4ch
        int 21h
    example endp
codesg ends
end main

【讨论】:

  • 谢谢你的解释,真的?
【解决方案2】:

MOV AH, 4CH 表示将十六进制值4C 存储(或“move”)到registerAH

(请注意,动词“move”在历史上被使用过,但它是一个非常不幸的动词选择,因为它意味着被移动的东西不再存在于它的旧位置,现在只能在它的新位置,而实际上所有“移动”指令实际上是复制数据。)

INT 21H 表示调用由十六进制数21 标识的interrupt

显然,某些操作系统(很可能是 MS-DOS,或者现在更可能是模拟 MS-DOS 的系统)捕获调用以中断 21 小时并执行一些与操作系统相关的功能,该功能由寄存器 AH 的值标识.

MS-DOS 中,在AH = 4Ch 时调用中断21h 会导致当前进程终止,并使用寄存器AL 的值作为进程的退出代码。

【讨论】:

    【解决方案3】:

    DOS 中断int 21/4ChEXIT - TERMINATE WITH RETURN CODE,al 的内容被用作返回码并且进程被终止。该文档附带以下注释:

    除非进程是它自己的父进程(参见#01378 [offset 16h] at AH=26h),所有打开的文件都将关闭并释放属于该进程的所有内存。调用此函数前应解除所有网络文件锁

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多