首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

4ch 和 4c00h 的区别?解决思路

2012-06-18 
4ch 和 4c00h 的区别?assume cs:codea segmentdb 1,2,3,4,5,6,7,8a endsb segmentdb 1,2,3,4,5,6,7,8b end

4ch 和 4c00h 的区别?
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
[解决办法]

探讨
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 ……

[解决办法]
探讨
引用:
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 ……


你要保证int 21h 中的功……

[解决办法]
是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。

热点排行