assembly 在汇编语言中,“MOV AH,4CH”是什么意思?

3pvhb19x  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(1358)

大多数汇编代码由以下指令终止

MOV AH, 4CH
INT 21H

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

8zzbczxx

8zzbczxx1#

在英特尔汇编语言中,MOV AH, something表示将某些内容存储(或“移动”(w))到寄存器(w)AH中。
(Note动词“move”在历史上被使用过,但它是一个非常不幸的动词选择,因为当你移动某个东西时,它就不再存在于它的旧位置,而只能在它的新位置被找到,而在现实中,所有的“move”指令实际上都是复制数据:一旦指令完成,就可以在两个位置都找到值。令人惊讶的是,在一个需要如此多逻辑的学科中,人们在他们使用的语言中可以如此不合逻辑。)
4CH是十六进制数4C,以10为基数时为76
后缀H向汇编程序表明它应该将数字解释为十六进制。通过要求所有数字(无论基数如何)都必须以十进制数字(0-9)开头,可以避免与寄存器名称(如AH)(以及标签(如hash:))混淆。AH不以十进制数字开头,因此它不是一个数字。
如果你想用十六进制来表示以10为基数的数字10,通常就是A,但是在intel汇编中,你必须说0AH。使用0作为前缀并不会改变数字的值,但是它确保该数以十进制数字开始,因此它将被解释为数而不是寄存器X1 M13 N1 X的名称。
这就是对“汇编语言中的MOV AH, 4CH是什么意思?”这个问题的答案。然而,OP可能并不想问这在汇编语言中是什么意思;操作员可能打算询问在MS-DOS中INT 21H后面的MOV AH, 4CH是什么意思。
所以,它是这样的:
INT 21H表示调用由十六进制数21标识的中断(w)
MS-DOS(或者更像是现在的MS-DOS模拟程序)捕获对中断21 h的调用,并执行一些操作系统相关的功能,这些功能由寄存器AH的值标识。
根据MS-DOS API (w),当AH = 4Ch时调用中断21 h会导致当前进程终止,并使用寄存器AL的值作为进程的退出代码。

64jmpszr

64jmpszr2#

DOS中断int 21/4ChEXIT - TERMINATE WITH RETURN CODE,al的内容被用作返回代码,进程被终止。文档附带以下注解:
除非进程是它自己的父进程(参见#01378 [offset 16 h] at AH= 26 h),否则所有打开的文件都将关闭,所有属于进程的内存都将被释放。在调用此函数之前,所有网络文件锁都应被移除

u4vypkhs

u4vypkhs3#

MOV代码的工作原理如下:MOV Value1,Value2 .
它把Value2放入Value1。但是你不能在内存中从一个变量移动到另一个变量。你可以像这样使用这段代码:

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

你写的这段代码把十六进制的4c(=十进制的76)放入ah寄存器。你问我们为什么要这样做?当我们使用中断时,我们总是要把一些数字(函数的数字)放入寄存器。
ah=4ch int 21h上,程序将终止对操作系统的控制。(结束程序)而int 21h是一个dos中断。例如:
ah=9h , dx=offset (string + '$') ,int 21h .在光标位置写入字符串.
ah=6hch =起始行、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

相关问题