C语言中参数的传值问题

C语言中参数的传值问题
C语言中参数的传值问题

C 语言中参数的传值问题

第1页

C 语言中参数的传值一直比较含糊,今天在网上看到三个面试题的详解,感觉讲的很好,就拿来记下,方便学习和记忆。 1. 考题一:程序代码如下: void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp;

printf(“x=%d,y=%d/n”,x,y) }

void main() {

int a=4,b=6; Exchg1 (a,b) ;

printf(“a=%d,b=%d/n”,a,b) }

输出的结果: x=____, y=____ a=____, b=____

问下划线的部分应是什么,请完成。

2. 考题二:代码如下。 Exchg2(int *px, int *py) {

int tmp=*px; *px=*py; *py=tmp;

print(“*px=%d,*py=%d/n”,*px,*py); } main() { int a=4; int b=6;

Exchg2(&a,&b);

Print(“a=%d,b=%d/n”, a, b); }

输出的结果为: *px=____, *py=____ a=____, b=____

问下划线的部分应是什么,请完成。

3. 考题三: Exchg2(int &x, int &y) {

int tmp=x; x=y; y=tmp;

print(“x=%d,y=%d/n”,x,y); } main() { int a=4; int b=6; Exchg2(a,b);

Print(“a=%d,b=%d/n”, a, b); }

输出的结果: x=____, y=____ a=____, b=____

问下划线的部分输出的应是什么,请完成。

你不在机子上试,能作出来吗?你对你写出的答案有多大的把握? 正确的答案,想知道吗?(呵呵,让我慢慢地告诉你吧!) 好,废话少说,继续我们的探索之旅了。

我们都知道:C 语言中函数参数的传递有:值传递,地址传递,引用传递这三种形式。题一为值传递,题二为地址传递,题三为引用传递。不过,正是这几种参数传递的形式,曾把我给搞得晕头转向。我相信也有很多人与我有同感吧?

下面请让我逐个地谈谈这三种传递形式。

二、函数参数传递方式之一:值传递

1. 一个预备的常识

为了说明这个问题,我先给出一个代码: int a=4; int x; x=a; x=x+3;

看好了没,现在我问你:最终a 值是多少,x 值是多少?

(怎么搞的,给我这个小儿科的问题。还不简单,不就是a==4 x==7嘛!)

在这个代码中,你要明白一个东西:虽然a 值赋给了x ,但是a 变量并不是x 变量哦。我们对x 任何的修改,都不会改变a 变量。呵呵!虽然简单,并且一看就理所当然,不过可是一个很重要的认识喔。

2.值传递的一个错误认识

先看题一中Exchg1函数的定义:

void Exchg1(int x, int y) //定义中的x,y变量被称为Exchg1函数的形式参数

{

int tmp;

tmp=x;

x=y;

y=tmp;

printf(“x=%d,y=%d/n”,x,y)

}

问:你认为这个函数是在做什么呀?

答:好像是对参数x,y的值对调吧?

请往下看,我想利用这个函数来完成对a,b两个变量值的对调,程序如下:

void main()

{

int a=4,b=6;

Exchg1 (a,b) //a,b变量为Exchg1函数的实际参数。

/ printf(“a=%d,b=%d/n”,a,b)

}

我问:Exchg1 ()里头的printf(“x=%d,y=%d/n”,x,y)语句会输出什么啊?

我再问:Exchg1 ()后的printf(“a=%d,b=%d/n”,a,b)语句输出的是什么?

程序输出的结果是:

x=6 , y=4

a=4 , b=6 //为什么不是a=6,b=4呢?

奇怪,明明我把a,b分别代入了x,y中,并在函数里完成了两个变量值的交换,为什么a,b变量值还是没有交换(仍然是a==4,b==6,而不是a==6,b==4)?如果你也会有这个疑问,那是因为你跟本就不知实参a,b 与形参x,y的关系了。

3.理解值传递的形式

看调用Exch1函数的代码:

main()

{

int a=4,b=6;

Exchg1(a,b) //这里调用了Exchg1函数

printf(“a=%d,b=%d”,a,b)

}

Exchg1(a,b)时所完成的操作代码如下所示。

int x=a;//←

int y=b;//←注意这里,头两行是调用函数时的隐含操作

int tmp;

tmp=x;

x=y;

y=tmp;

请注意在调用执行Exchg1函数的操作中我人为地加上了头两句:

int x=a; int y=b;

这是调用函数时的两个隐含动作。它确实存在,现在我只不过把它显式地写了出来而已。问题一下就清晰起来啦。(看到这里,现在你认为函数里面交换操作的是a,b变量或者只是x,y变量呢?)原来,其实函数在调用时是隐含地把实参a,b 的值分别赋值给了x,y,之后在你写的Exchg1函数体内再也没有对a,b进行任何的操作了。交换的只是x,y变量。并不是a,b。当然a,b的值没有改变啦!函数只是把a,b的值通过赋值传递给了x,y,函数里头操作的只是x,y的值并不是a,b的值。这就是所谓的参数的值传递了。

哈哈,终于明白了,正是因为它隐含了那两个的赋值操作,才让我们产生了前述的迷惑(以为a,b已经代替了x,y,对x,y的操作就是对a,b的操作了,这是一个错误的观点啊!)。

三.函数参数传递方式之二:地址传递

继续——地址传递的问题!

看题二的代码:

Exchg2(int *px, int *py)

{

int tmp=*px;

*px=*py;

*py=tmp;

print(“*px=%d,*py=%d/n”,*px,*py);

}

main()

{

int a=4;

int b=6;

Exchg2(&a,&b);

Print(“a=%d,b=%d/n”, a, b);

}

它的输出结果是:

*px=6,*py=4

a=6,b=4

看函数的接口部分:Exchg2(int *px,int *py),请注意:参数px,py都是指针。

再看调用处:Exchg2(&a, &b);

它将a的地址(&a)代入到px,b的地址(&b)代入到py。同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了px,py。

px=&a;

py=&b;

呵呵!我们发现,其实它与值传递并没有什么不同,只不过这里是将a,b的地址值传递给了px,py,而不是传递的a,b的内容,而(请好好地在比较比较啦)

整个Exchg2函数调用是如下执行的:

px=&a; //

py=&b; //请注意这两行,它是调用Exchg2的隐含动作。

int tmp=*px;

*px=*py;

*py=tmp;

print(“*px=%d,*py=%d/n”,*px,*py);

这样,有了头两行的隐含赋值操作。我们现在已经可以看出,指针px,py的值已经分别是a,b变量的地

址值了。接下来,对*px,*py的操作当然也就是对a,b变量本身的操作了。所以函数里头的交换就是对a,b 值的交换了,这就是所谓的地址传递(传递a,b的地址给了px,py),你现在明白了吗?

四.函数参数传递方式之三:引用传递

看题三的代码:

Exchg3(int &x, int &y) //注意定义处的形式参数的格式与值传递不同

{

int tmp=x;

x=y;

y=tmp;

print(“x=%d,y=%d/n”,x,y);

}

main()

{

int a=4;

int b=6;

Exchg3(a,b); //注意:这里调用方式与值传递一样

Print(“a=%d,b=%d/n”, a, b);

}

输出结果:

x=6, y=4

a=6, b=4 //这个输出结果与值传递不同。

看到没有,与值传递相比,代码格式上只有一处是不同的,即在定义处:

Exchg3(int &x, int &y)。

但是我们发现a与b的值发生了对调。这说明了Exchg3(a,b)里头修改的是a,b变量,而不只是修改x,y 了。

我们先看Exchg3函数的定义处Exchg3(int &x,int &y)。参数x,y是int的变量,调用时我们可以像值传递(如:Exchg1(a,b); )一样调用函数(如:Exchg3(a,b); )。但是x,y前都有一个取地址符号&。有了这个,调用Exchg3时函数会将a,b 分别代替了x,y了,我们称x,y分别引用了a,b变量。这样函数里头操作的其实就是实参a,b 本身了,也就是说函数里是可以直接修改到a,b的值了。

最后对值传递与引用传递作一个比较:

1.在函数定义格式上有不同:

值传递在定义处是:Exchg1(int x, int y);

引用传递在这义处是:Exchg1(int &x, int &y);

2.调用时有相同的格式:

值传递:Exchg1(a,b);

引用传递:Exchg3(a,b);

3.功能上是不同的:

值传递的函数里操作的不是a,b变量本身,只是将a,b值赋给了x,y函数里操作的只是x,y变量而不是a,b,显示a,b的值不会被Exchg1函数所修改。

引用传递Exchg3(a,b)函数里是用a,b分别代替了x,y。函数里操作的是a,b。

C语言与汇编语言互相调用

浅谈C程序中调用汇编模块的方法 C语言是目前非常流行的一种编程语言,除具有高级语言使用方便灵活、数据处理能力强、编程简单等优点外,还可实现汇编语言的大部分功能,如可直接对硬件进行操作、生成的目标代码质量较高且执行的速度较快等。所以在工程上对硬件处理速度要求不很高的情况下,基本可以用C代替汇编语言,编写接口电路的控制软件。但C也不能完全取代汇编语言,如在一些对速度要求很高的实时控制系统中,以及对硬件的特殊控制方面,C有时也不能完全很好胜任,还需要汇编语言来编写。因为汇编语言目标代码更精练,对硬件直接控制能力更强和执行速度更快,但汇编语言编程烦难、表达能力差也显而易见。比较好的解决办法是C与汇编语言混合编程,即用C编写软件的调度程序、用户界面以及速度要求不高的控制部分,而用汇编语言对速度敏感部分提供最高速度的处理模块,供C调用。这种方法提供了最佳的软件设计方案,做到了兼顾速度效率高和灵活方便。由于本人的毕业设计需要C 程序中调用汇编模块的方法来提高ARM定点指令的执行速度,故对这方面进行了学习。学习心得如下: 对于C和汇编语言的接口主要有两个问题需要解决。 一、调用者与被调用者的参数传递 这种数据传递通过堆栈完成,在执行调用时从调用程序参数表中的最后一个参数开始,自动依次压入堆栈;将所有参数压入堆栈后,再自动将被调用程序执行结束后的返回地址(断点)压入堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。例如一调用名为add汇编程序模块的主函数:main( ){...... add(dest,op1,op2,flages);......}。在此例中对主函数进行反汇编,主函数在调用add函数前自动组织的堆栈。 . . . lea 0xfffffffe8(%ebp),%eax #flages数组的首地址入栈 push %eax pushl 0xfffffff8(%ebp) #OP2入栈 pushl 0xfffffffc(%ebp) #OP1 入栈 pushl 0xfffffff0(%ebp) #dest地址入栈 call 0x80483f0 #调用add函数 . . 执行完add调用语句后,栈内数据结果如图一所示。 进入汇编子程序后,为了能正确获取主调程序并存入堆栈中的数据,被调的汇编子程序先后要做如下一些工作: 1、保存esp的副本 进入汇编子程序后,子程序中免不了要有压栈和出栈的操作,故ESP时刻在变化。为了能用ESP访问堆栈中的参数,安全办法是一进入子程序后,先为ESP制副本,以后对传递参数的访问都用副本进行。一般可用EBP保存ESP,如: push %ebp mov %ebp,%esp

汇编语言的过程调用与c语言的函数调用

姓名:孙贵森 学号: 汇编语言地过程调用,如果需要传递参数,一般有种方法,通过寄存器来“传递”,或是通过参数来传递.(还有将所有参数制成参数列表并压栈地传递方法,但较少用.)通过寄存器来“传递”,不是真正意义上地传递,其只不过是事先在几个有限地寄存器中设置相应地值后,再调用过程,过程再直接读取这些寄存器地内容.可想而知,此法犹如语言中地全局变量,极易感染.而如果通过参数来传递,又不得不面临手工维护堆栈框架( )地重担.堆栈框架动态地存放着参数、调用过程地返回地址、过程局部变量、过程内地压栈等内容,也是不好对付地.一般情况下,一个普通地过程可能如下编写:文档来自于网络搜索 , ..... 作为遵从调用约定()调用者,则需这样调用上述过程: ; ; ; , * ; 而如果遵从调用约定,则: , ...... , [ ] ; , [ ]; ...... * ; , , ; ...... , [ ]; , [ ]; , [ ; , [ ]; ...... , ; * ;

在被调用地过程内,分为种情况: . 无参数,也无局部变量 . 有参数 . 有局部变量 当无参数且无局部变量时,堆栈中只是保存语句地下一条语句地地址,可以很安全地返回.而当有参数,使用伪指令地接收参数地形式,则会自动生成正确地返回代码.而当有局部变量,使用伪指令来定义局部变量,也会自动地生成正确地返回代码.在将参数压栈时,仍需将其打包为位地,文档来自于网络搜索 ; , ; ; 另一选择是,将用作地变量声明为. ; ; 还有另一种方法,即,总是传递指针. ; (, ) , ; , , , , , [] , , [] 这种方法在保留了我们可以声明仅需地变量类型地同时,也确保位地方法正确压栈.语言中地每一个函数都是一个独立地代码块.一个函数地代码块是隐藏于函数内部地,不能被任何其它函数中地任何语句(除调用它地语句之外)所访问(例如,用语句跳转到另一个函数内部是不可能地).构成一个函数体地代码对程序地其它部分来说是隐蔽地,它既不能影响程序其它部分,也不受其它部分地影响.换言之,由于两个函数有不同地作用域,定义在

汇编语言编程规范

软件设计更多地是一种工程,而不是一种个人艺术。如果不统一编程规范,最终写出的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。 分析表明,编码阶段产生的错误当中,语法错误大概占20%左右,而由于未严格检查软件逻辑导致的错误、函数(模块)之间接口错误及由于代码可理解度低导致优化维护阶段对代码的错误修改引起的错误则占了一半以上。 可见,提高软件质量必须降低编码阶段的错误率。如何有效降低编码阶段的错误呢?这需要制定详细的软件编程规范,并培训每一位程序员,最终的结果可以把编码阶段的错误降至10%左右,同时也降低了程序的测试费用,效果相当显著。 本文从代码的可维护性(可读性、可理解性、可修改性)、代码逻辑与效率、函数(模块)接口、可测试性四个方面阐述了软件编程规范,规范分成规则和建议两种,其中规则部分为强制执行项目,而建议部分则不作强制,可根据习惯取舍。 1.排版 规则1 程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB和空格缩进。缩进的目的是使程序结构清晰,便于阅读和理解。 默认宽度应为8个空格,由于Word中为4个空格,为示范清晰,此处用2个代替(下同)。 例如: MOV R1, #00H MOV R2, #00H MOV PMR, #PMRNORMAL MOV DPS, #FLAGDPTR MOV DPTR, #ADDREEPROM read1kloop: read1kpage: INC R1

MOVX A, @DPTR MOV SBUF, A JNB TI, $ CLR TI INC DPTR CJNE R1, #20H, read1kpage INC R2 MOV R1, #00H CPL WDI CJNE R2, #20H, read1kloop ;END OF EEPROM 规则2 在指令的操作数之间的,使用空格进行间隔,采用这种松散方式编写代码的目的是使代码更加清晰。 例如: CJNE R2, #20H, read1kloop ;END OF EEPROM 规则3 一行最多写一条语句。 规则4 变量定义时,保持对齐。便于阅读和检查内存的使用情况。 例如: RegLEDLOSS EQU 30H ; VARIABLE ; TESTLED==RegLEDLOSS.0 RegLEDRA EQU 31H ; VARIABLE

arm汇编语言调用C函数之参数传递

arm汇编语言调用C函数之参数传递 于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS 主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS的详细内容可以查看ADS1.2 Online Books ——Developer Guide的2.1节。这篇文档要讲的是汇编代码中对C函数调用时如何进行参数的传递以及如何从C函数正确返回。 不同于x86的参数传递规则,ATPCS建议函数的形参不超过4个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3四个寄存器进行传递;若形参个数大于4,大于4的部分必须通过堆栈进行传递。 我们先讨论一下形参个数为4的情况. 实例1: test_asm_args.asm //-------------------------------------------------------------------------------- IMPORT test_c_args ;声明test_c_args函数 AREA TEST_ASM, CODE, READONLY EXPORT test_asm_args test_asm_args STR lr, [sp, #-4]! ;保存当前lr ldr r0,=0x10 ;参数 1 ldr r1,=0x20 ;参数 2

ldr r2,=0x30 ;参数 3 ldr r3,=0x40 ;参数 4 bl test_c_args ;调用C函数 LDR pc, [sp], #4 ;将lr装进pc(返回main函数) END test_c_args.c //-------------------------------------------------------------------------------- void test_c_args(int a,int b,int c,int d) { printk("test_c_args:\n"); printk("%0x %0x %0x %0x\n",a,b,c,d); } main.c //-------------------------------------------------------------------------------- int main() { test_asm_args(); for(;;); } 程序从main函数开始执行,main调用了test_asm_args,test_asm_args 调用了test_c_args,最后从test_asm_args返回main。代码分别使用了

C语言调用汇编语言时变量的传递

F2812中C语言调用汇编函数 参考资料: (1) SPRU514 ---- TMS320F28x Optimizing C/C++ Compiler User’s Guide.pdf; (2) spru430d ---- TMS320C28x DSP CPU and Instruction Set Reference Guide; (3) spru513c ---- TMS320C28x Assembly Language Tools User's Guide. 一、编写C语言能调用的.asm文件 以delay.asm为例: 1、将文件保存为.asm文件; 2、在文件中编写如下代码: ;********************************************************** ***********/ ;* 鲍正华*/ ;* 2010.07.09 */

;********************************************************** ***********/ ;//######################################################### ################## ; @FunctionName: Delay_asm ; ; @Brief: 延时1s ; ; @Param: unsigned long cnt 传给ACC ; ; @Return: 无 ;//######################################################### ################## .def _Delay_asm .global _Delay_asm

汇编考前辅导带答案版

一、单项选择题 1、CPU发出的访问存储器的地址是(A )。 A.物理地址 B.偏移地址 C.逻辑地址 D.段地址 2、下列指令中操作数在代码段中的是(A )。 A.MOV AL,42H B.ADD AL,BL C.SUB [BX],DI D.INC [DI] 3、与MOV BX,OFFSET VAR指令完全等效的指令是(D )。 A.MOV BX,VAR B.LDS BX,VAR C.LES BX,VAR D.LEA BX,VAR 4、表示过程定义结束的伪指令是(A )。 A.ENDP B.ENDS C.END D.ENDM 5、BUF1 DB 3 DUP(0,2 DUP(1,2),3) COUNT EQU $ - BUF1 符号COUNT等价的值是(B )。 A.6 B.18 C.16 D.8 6、下列寄存器中,作为16位寄存器的是(D )。 A. AL B. BL C. CH D.DX 7、在程序运行过程中,确定下一条指令的物理地址的计算表达式是(C )。 A.DS*16+SI B. ES*16+DI C. CS*16+IP D. SS*16+SP 8、物理地址(10FF0H )=10H,(10FF1H )=20H,(10FF2H )=30H,从地址10FF1H中取一个字的内容是(B )。 A.1020H B.3020H C.2030H D.2010H

9、将AX 清零,下列指令错误的是(C )。 A.SUB AX,AX B.XOR AX,AX C.OR AX,00H D.AND AX,00H 10、完成同指令XCHG AX,BX相同功能的指令或指令序列是(D )。 A. MOV AX,BX B. MOV BX,AX C. PUSH AX D. MOV CX,AX POP BX MOV AX,BX MOV BX,CX 11、JMP BX 的目标地址的偏移量为(A )。 A. BX 的内容 B. BX 所指向的内存单元的内容 C. IP + BX 的内容 D. IP + [BX] 12、可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是(D )。 A.AX,BX,CX,DX B.DS,ES,CS,SS C.SP,BP,IP,BX D.SI,DI,BP,BX 13、设SP初值为2000H,执行指令“PUSH AX”后,SP的值是(D )。 A.1FFFH B.1998H C.2002H D.1FFEH 14、汇编语言源程序中,每个语句可由四项组成,其中名字项是一个符号,下面列出的有效名字是(A )。 A.Variable B.First&ld C.0FFFFH D.‘Memphis’ 15、要求将A,B两个字符的ASCⅡ码41H,42H顺序存放在连续两个字存储单元中,可选用的语句是(B )。 A.DA1DB‘AB’ B.DA1DW‘AB’ C.DA1DB0ABH D.DA1DW0ABH

汇编语言程序设计2008A,有答案

汇编语言程序设计2008A 一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要 求的,请将其代码填写在题后的括号内。错选、多选或未选均无分 1.在汇编语言源程序中,以下哪一个编码是二进制形式的编码() (A)1010 (B)01H (C)01000101B (D)22D 2.假设(AL)=34H,(AH)=2FH,执行指令XCHG AL, AH 后,(AH)为() (A)2FH (B)34H(C)00H (D)3FH 3.TF标志位的含义为() (A)单步标志(B)最高位进位标志(C)补码溢出标志(D)零值标志 4.对于指令MOV AL, [BX],其源操作数的寻址方式为() (A)寄存器寻址(B)立即数寻址(C)基址寻址(D)寄存器间接寻址 5.对于指令POP 0100H[BX][SI],其目的操作数的寻址方式为() (A)寄存器寻址(B)变址寻址(C)基址寻址(D)基址变址寻址 6.假设(BX)=0100H,对于指令ADD AL, 0200H[BX],其源操作数的有效地址为() (A)0100H (B)0200H (C)0300H (D)0400H 7.假设(DS)=0C00H,由逻辑地址0C00H:0200H所指示的字类型内存单元内容为02FDH,执行指令LEA BX, [0200H]后,(BX)为() (A)不确定(B)02FDH (C)0200H (D)0C00H 8.以下标志位中,INC指令不影响的标志位是() (A)CF (B)AF (C)OF (D)PF 9.假设(AL)=0F2H,执行指令ADD AL, 34H后,OF标志位的取值为() (A)1 (B)0 (C)2 (D)不确定 10.假设(BL)=01H,执行指令SUB BL, 02H后,CF标志位的取值为() (A)1 (B)0 (C)2 (D)3

实验1 汇编语言 数据传送

实验1 数据传送 实验目的 掌握8086指令系统的数据传送指令及8086的寻址方式 利用调试工具来调试汇编语言程序 实验设备 PC微型计算机一台 实验预习要求: 复习8086指令系统的数据传送指令及8086的寻址方式 学习TD.EXE的使用方法 实验内容1: 通过下面的程序段输入和执行来熟悉TD.EXE的使用,通过显示屏观察程序的执行情况。练习程序段如下: MOV BL, 88H MOV CL, BL MOV AX, 9999H MOV DS:[0002H], AX 操作步骤: 1、启动TD.EXE 方法1 直接打开BIN文件夹下TD.EXE文件,方法2 把BIN 文件夹放在根目录下,如在:D:\BIN,打开“开始—附件—命令提示符”用CD命令使当前目录为D:\BIN 然后输入TD 或TD.EXE 2、输入程序段 把光标移到CS:0100H处开始输入程序 在光标处直接输入练习程序段,键入时屏幕上会弹出一个输入窗口,在这个窗口中输入程序段 3、执行程序段 按F8单步执行程序段,观察寄存器内容的变化情况和内存单元DS:[0002H]的内容变化情况 实验内容2: MOV AX, 1111H MOV BX, 2222H MOV CX, 3333H PUSH AX PUSH BX PUSH CX 第一种出栈方式 POP AX

POP BX POP CX 第二种出栈方式 POP BX POP CX POP AX 第三种出栈方式 POP CX POP BX POP AX 操作步骤: 1、启动TD.EXE 2、输入程序段 把光标移到CS:0100H处开始输入程序 在光标处直接输入练习程序段,键入时屏幕上会弹出一个输入窗口,在这个窗口中输入程序段 3、执行程序段 按F8单步执行程序段,观察寄存器内容的变化情况和内存单元DS:[0002H]的内容变化情况 实验报告要求: 1、写明本次实验的执行结果,填好表1-1 2、设置各寄存器及存储单元的内容如下 BX=0010H , SI=0001H DS:[0010H]=12H, DS:[0011H]=34H, DS:[0012H]=56H, DS:[0013H]=78H, DS:[0014H]=9AH, DS:[0015H]=0ABH, DS:[0016H]=0BCH 说明下列各条指令执行完后AX寄存器中的内容,上机验证(观察寄存器和TD数据区—在窗口的左下角)并填好表1-2(注:输入下列指令前应先用MOV指令把各寄存器和在存储单元的内容设置好) (1)MOV AX, 1200H (2)MOV AX, BX (3)MOV AX, [0010H] (4)MOV AX, [BX] (5)MOV AX, 0005H[BX] (6)MOV AX, [BX][SI] (7)MOV AX, 0003H[BX][SI]

相关文档
最新文档