assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
d segment
db 0,0,0,0,0,0,0,0
d ends
code segment
start: mov ax,a
mov ds,ax ;定义A段地址
mov ax,d
mov es,ax ;定义c段地址
mov bx,0 ;BX=0
mov cx,8 ;循环8次
s:mov al,ds:[bx]
mov es:[bx],al
inc bx
loop s ;依次将A段数据移入C段
mov ax,b
mov ds,ax ;定义B段地址
mov ax,d
mov es,ax ;定义C段地址
mov bx,0 ;BX=0
mov cx,8 ;循环8次
s0:mov al,ds:[bx]
add es:[bx],al
inc bx
loop s0 ;依次将B段数据加入C段
mov ax,4c00h 如果将其改为 4ch 用 msam(编译器)能生成exe文件 但是不能执行
int 21h
code ends
可是其他的程序 用4ch能执行,请问这是怎么回事啊?
------解决方案--------------------------------------------------------
mov ax,4ch
这里的4ch实际上是004ch,即ah=0, al=4ch
而正确的赋值应当是ah=4ch, al=0;ah表示功能号,al在这里表示程序的返回值
------解决方案--------------------------------------------------------
mov ax,4c00H
ax->4c00H
mov ax,4cH
ax->004cH
------解决方案--------------------------------------------------------
mov ax,4c00H
ax->4c00H
mov ax,4cH
ax->004cH
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
是DOS的中断调用
通过给AH寄存器赋值4CH,然后调用INT 21H指令,计算机就会根据AH寄存器中的值执行相应的操作,其中4CH是返回DOS系统,还可给AH寄存器赋其他值。
调用DOS 4CH功能
格式:
MOV AH 4CH
INT 21H
终止当前程序运行,把控制权交给调用程序,即返回给DOS系统.
4CH和400CH都不是一个数,DOS没有这个功能调用把.
------解决方案--------------------------------------------------------
功能调用的出口参数在AH中,和AL没关系,所以AX=4C00H和AH=4CH一样..
------解决方案--------------------------------------------------------
大哥,子程序号使用ah来传递的。所以用4c00h,00是给了al。