角的比较与运算:比较运算指令

使用比较指令是将栈顶中数与其它操作数进行比较比较结果存于状态寄存器条件编码位C3~C0处(参阅表11.2)具体比较运算指令及其功能描述如表11.5所列 表11.5比较运算指令及其功能 指令格式指令功能 FCOM将栈顶数据与另个操作数进行比较该操作数可以存储在堆栈寄存器中也可存储在内存中 当在指令中不指定操作数时其默认操作数是ST和ST(1) FCOMP/FCOMPP此指令比较功能与FCOM相致所不... [阅读全文]

介电常数:常数操作指令

为了计算方便协处理器提供了几个将常用常数压栈指令如表11.7所示 表11.7常数压栈指令及其常数值 指令格式指令功能指令格式指令功能 FLDZST=+0.0FLDL2TST=log210 FLD1ST=+1.0FLDLG2ST=log102 FLDPIST=πFLDLN2ST=loge2 FLDL2EST=log2e   11.3.7协处理器控制指令 协处理器控制指令是用来实现控制协处理器状态而设... [阅读全文]

协处理器:协处理器的编程举例

例11.8已知L=4.0F按每次递增10.0幅度从10.0增加到1000.0试按公式Y=2πFL计算出100个Y值并把它们存入RES中 解: .MODELSMALL .386 .387 .DATA LDD 4.0 FDD 1000.0;为了便于循环控制F“从大到小”来计算 TENDD 10.0 YDD 100DUP(?) .CODE .STARTUP FLDPI... [阅读全文]

汇编指令的嵌入

为了提高C语言内某特殊功能段处理效率我们可以在其源中嵌入段汇编语言段这样做虽然能达到提高了处理效率目但它无疑以丧失源可移植性为代价所以当想用C语言和汇编语言混合编程时员需要权衡采用这种方法利与弊 在C语言中嵌入汇编语言语法如下(*): asmopcodeoperands;orline 注意:这里分号’;’不是汇编语言中起注释作用分号而是作为语句分隔符 若C语言源中嵌入条汇编语句则可按下列方式来做:... [阅读全文]

c语言输出:C语言程序的汇编输出

在TurboC或BorlandC编程环境下我们可TCC或BCC行命令把个C语言源转换成汇编语言源通过阅读汇编语言可以很准确地知道C语言语句功能是如何实现这样可为将来学习编译原理课程中\"寄存器调度\"和\"代码生成\"等相关知识打下良好基础 C语言源转换命令格式如下: TCC-St1.cpp或BCC-St1.cpp   ;假设其文件名为t1.cpp 若命令TCC/BCC不带参数话则将显示其使用方法... [阅读全文]

内核模块:Win98内核-IBMBIO各模块的介绍

Win98内核分析(Kernel32) IBMBIO各模块介绍 、环境管理块emb 要读入EMB可使用INT2152H号功能该中断后EMB地址会放在ES:BX 中具体使用方法如下: C:\\debug -a 0F6C:0100movah,52 0F6C:010221 0F6C:01043 0F6C:0105 -g=01000104//运行100至104命令 AX... [阅读全文]

masm6.14:MASM6.14的用法

本文将分成几个部分来叙述 ML参数问题 在编译时候主要使用是ML.EXE因此我们重点将集中在这个上ML.EXE使用格式如下: ML[/options]filelist[/linklinkoptions] 下面简单解释下些常用编译选项绝大多数参数我也没有用过所以我不能保证解释正确性如果你发现了什么欢迎来信告诉我  /AT:允许小模式  /Bl:指定链接器  /c:... [阅读全文]

电脑入门的基础知识:汇编语言基础知识入门

给初次接触汇编者汇编语言和CPU以及内存,端口等硬件知识是连在起.这也是为什么汇编语言没有通用性原因.下面简单讲讲基本知识(针对INTELx86及其兼 容机)x86汇编语言指令,其操作对象是CPU上寄存器,系统内存,或者立即数.有些指令表面上没有操作数,或 者看上去缺少操作数,其实该指令有内定操作对象,比如push指令,定是对SS:ESP指定内存操作,而cdq操... [阅读全文]

修改中断向量:修改中断向量的步骤

前面分别介绍了读取和设置中断入口地址方法在编程实际过程中若要修改某个具体中断处理时般需按下面几步来完成: 1)、读取指定中断中断处理入口地址并把它保存在存储单元内; 2)、把用户编写段设置为指定中断新处理; 3)、在用户结束之前(或不需要新处理时)把步骤1保存入口地址恢复成处理该中断入口地址 员按以上三步来编程可保证:在其运行过程中该指定中断将按新处理来处理结束后中断系统又恢复成原来处理方式所以这... [阅读全文]

汇编宏的定义和引用

宏是设计另个基本概念它是把段代码用个特定标识符(即:宏名)来表示这样在编写源时员就可以直接使用该标识符来代替段代码编写从而减少了重复代码编写工作也为减少提高可维护性提供了帮助宏在高级语言(如:C/C等)也有广泛使用 9.1宏定义和引用 通常情况下宏是用来代表个具有特定功能段它只需在源中定义次但可在源中引用多次只要在编写时需要就可以直接使用它 9.1.1宏定义 在使用宏之前必须先定义宏定义宏般格式如... [阅读全文]

宏的绝对引用:宏的引用

在源程序中,一旦定义了某宏,那么,在该程序的任何位置都可直接引用该宏,而不必重复编写相应的程序段。引用宏的一般格式如下: 宏名 [实参1,实参2,……] 其中:实参的位置要与形参的位置要对应,但实参的个数可以与形参的个数不相等。 、当实参的个数多于形参的个数时,多出的实参被忽略; 、当实参的个数少于形参的个数时,没有实参对应的形参用“空”来对应。但在宏展开时,所得到的指令必须是合法的汇编指令,否则... [阅读全文]

自定义嵌套标签:宏的嵌套定义

宏的嵌套定义有二种方式:宏定义体内引用其它的宏和宏定义体内定义其它的宏。 1、宏定义体内引用其它的宏 在宏的定义体中又引用了其它已定义好的宏,这种宏定义方式在实际的编程过程时常会用到。如果被引用的宏还没定义的话,汇编程序将会显示出错信息。 例如: ABSMACROOPRD1,OPRD2 … MOPMSUB,OPRD1,OPRD2;引用前面已定义的宏MOPM … ENDM 在定义宏ABS时,引用了前... [阅读全文]

子程序:宏与子程序的区别

宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别: 1、在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用; 2、汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化; 3、宏引用时,参数是通过“实... [阅读全文]

运算符的优先级:宏参数的特殊运算符

为了宏定义和引用的某些特殊需要,汇编程序还支持几个具体特定含义的运算符。 9.2.1连接运算符 在宏定义中,如果形式参数与其它字符连接在一起,或形式参数出现在字符串之中,那么,就必须使用连接运算符(&)。 例9.5定义一个转移宏JUMP,其一个参数决定转移类别,另一个参数指定转移目标。 解: JUMPMACROCON,here J&CONhere ENDM 假设存在下面二个引用语句,那么,点击它们... [阅读全文]

转义字符:字符转义运算符

在引用宏时,如果实参中含有特殊字符,而又要该特殊字符当作普通字符来出来,那么,就必须在该特殊字符前加上字符转义运算符“!”。 下面不使用和使用字符转义运算符的宏引用语句及其宏扩展的结果:     DEFMSGInputonenumber(90):   1    DB’Inputonenumber(90):’,0DH,0AH,’$’        ;第一个“”与字符“”相比配,而不会把它当作“大于号... [阅读全文]

伪指令:与宏有关的伪指令

在宏定义时,为了满足某种特殊需要,汇编语言还提供了几个伪指令。 9.3.1局部标号伪指令LOCAL 在宏定义体中,如果存在标号,则该标号要用伪指令LOCAL说明为局部标号,否则,当在源程序中,有多于一次引用该宏时,汇编程序在进行宏扩展后将会给出:标号重复定义的错误。 伪指令LOCAL的一般格式如下: LOCAL 标号1,标号2,…… 伪指令LOCAL必须是伪指令MACRO后的第一条语句,并且在MA... [阅读全文]

宏定义:取消宏定义伪指令

伪指令PURGE的一般格式如下: PURGE 宏名1,宏名2,…… 该伪指令通知汇编程序取消“宏名1,宏名2,……”宏名表中的宏定义。在此语句后,如果还有这些宏的引用语句,则汇编程序不会把它们当作宏引用来进行扩展,并且还将显示出错信息。 伪指令PURGE的使用频率较低。 9.3.3中止宏扩展伪指令 伪指令EXITM的一般格式如下: EXITM 该伪指令书写在宏定义体中,用来告诉汇编程序:如果遇到该... [阅读全文]

伪指令:重复汇编伪指令

在编写源程序时,有时会出现连续相同或相似的语句(组)。当出现这种情况时,可利用重复伪指令来重复语句,从而达到简化程序的目的。 重复汇编伪指令所定义的重复块是宏的一种特殊形式,也是由伪指令ENDM来结束重复块。用重复汇编伪指令定义的重复块也可带有参数,并在汇编过程中参数被实参代替,但重复块不会被命名,不能在程序的其它地方引用。 9.4.1伪指令REPT 伪指令REPT的作用是把一组语句重复指定的次数... [阅读全文]

伪指令:重复汇编伪指令 伪指令IRP

伪指令IRP 伪指令IRP的作用是用每个参数创建一组语句,其重复次数由伪指令后面参数表中参数的个数来确定。其一般使用格式如下: IRP形式参数,实参1,实参2,……,实参n 重复的语句组 ENDM 例9.11把16位通用寄存器之值相加,并把结果存入寄存器AX。 解:由于16位通用寄存器名是一些不同的符号,不能用计数的方法来依次访问它们,所以,我们需要用伪指令IRP来实现。 IRPREG,BX,CX... [阅读全文]

伪指令:条件汇编伪指令

条件汇编伪指令是告诉汇编程序:根据某种条件确定一组程序段是否加入到目标程序中。使用条件汇编伪指令的主要目的是:同一个源程序能根据不同的汇编条件生成不同功能的目标程序,增强宏定义的使用范围。 条件汇编伪指令与高级语言(如:C/C++)的条件编译语句在书写形式上相似,在所起作用方面是完全一致的。 9.5.1条件汇编伪指令的功能 条件汇编伪指令的一般格式如下: IFnnnn条件表达式 语句组1 [ELS... [阅读全文]

flash扩充元件:宏的扩充

MASM6.11编程系统对宏定义及其相关语句进行了一定程度的扩充。虽然这些扩充给编程带来了一些方便,但它们不一定能被其它的汇编语言编程系统所接受,所以,程序员在使用这些方便的扩充功能时,要注意到可能带来的限制。 下面介绍MASM6.11编程系统对宏及其相关语句的扩充。 9.6.1宏定义形式 在MASM6.11编程系统中,其宏定义的一般形式如下: 宏名MACRO[参数1[:tag]][,参数2[:t... [阅读全文]

伪指令:循环伪指令FOR

循环伪指令FOR与9.4.2节中伪指令IRP在功能上完全一致,设置该伪指令的原因也是为了保证与先前版本的兼容性。 伪指令FOR的使用方式如下: FOR parameter[:REQ|:=default],argument[,argument]... 语句序列;被重复的汇编语言语句 ENDM 其中各参数的说明如下: parameter一个合法的标识符,它依次取后面参数表中的值。在指令序列中,该变量的... [阅读全文]

伪指令:转移伪指令GOTO

转移伪指令GOTO用于实现宏定义体内的转移功能,其使用方式如下:    GOTO 标号    … :标号     ;标号后不能写指令,但可写注释    … 该伪指令的功能是使汇编程序转移到“标号”处汇编,它只能在宏定义MACRO、REPEAT、WHILE、FOR和FORC等语句块内使用,该标号也只在该语句块内有效。 9.6.7宏扩充的举例 例9.17:编写一个给任意寄存器或存储单元清零的宏定义。 ... [阅读全文]

系统的定义:系统定义的宏

MASM6.11系统定义了大量的标准宏,程序员能很方便地使用它们。在使用这些系统宏之前,要象C语言那样用伪指令INCLUDE把有关“宏库”文件包含在用户的源程序中。主要的系统宏库文件有:DOS.INC和BIOS.INC,它们存放在系统的include子目录中。 例9.18:使用系统宏定义,编写从键盘上读取一个字符。 解: includedos.inc    ;把系统宏定义文件包含在源程序之中 ……... [阅读全文]

汇编应用程序的设计

在前面各章节中,我们侧重介绍了汇编语言程序设计中各组成部分的作用,本章的重点是对前面所学知识的综合运用。希望通过各种不同类型的例子,使读者能够掌握用汇编语言编程的基本技巧。 10.1字符串的处理程序 字符或字符串是一类重要的非数值计算的处理对象。许多编辑软件都具有字符串查找、替换、大小写的转换、单词的自动识别等功能,网络上的信息搜索也是现在一种常用的功能等,这些功能的实现无疑都要涉及到字符串的处理... [阅读全文]

vb字符串处理函数:汇编字符串的处理程序

例10.2编写一个把字符串中的所有小写字符转换成大写字符的子程序Strupr,要求字符串的首地址和结束符为其入口参数。 解: .MODEL SMALL,C .DATA buffDB\"Thisisaexample.\",0 .CODE StruprPROCUSESAXBX,String:PTRBYTE,Tail:BYTE MOVBX,String .REPEAT MOVAL,[BX] .IF AL... [阅读全文]

vb字符串处理函数:汇编字符串的处理程序(2)

例10.4编写一个把字符串中空格和TAB压缩掉的子程序Compress,字符串String是以ASCII码0为结束符。 解: .MODELSMALL,C .DATA SPACEEQU 20H TABEQU 9H BuffDB \"1234Abcdef\",0 .CODE CompressPROC USESAXBXSIDS,String:FARPTRBYTE LDSSI,String;SI用于扫描字... [阅读全文]

汇编数据的分类统计程序

数据的分类和统计也是一类非数值计算,数据的分类统计方法在例6.10中已介绍,下面通过一个例子介绍数据的分类存储问题。 例10.5统计从地址0040H:0000H开始的100个字中,把正数和负数按照它们先后出现的次序分别存储在缓冲区Data1和Data2,并把每类的个数存入相应缓冲区的第一个字单元中。 解:由于在指定地址之后的100个字中,可能存在全是正数或负数的情况,所以,缓冲区Data1和Dat... [阅读全文]

汇编分类统计程序举例

用键盘输入任意一字符串,分类统计该字符串中每个数字和字母的出现次数。解: .MODEL SMALL .DATA N=80 BuffDBN,?,NDUP(?) NumDW36DUP(0);每个字用于存放’0’~’9’,’A’~’Z’出现的个数 .CODE .STARTUP LEADX,Buff MOVAH,0AH INT21H;输入一个字符串 XORCH,CH MOVCL,Buff+1;CX=输入字... [阅读全文]

动易数据库转换程序:汇编数据转换程序举例

“用16位除10”的方法从低向高依次得到每位的数值,但若待输出的数据是32位,用10除之后,其商很可能会超过16位,所以,不能简单地引用例10.7的方法来输出32位二进制。 假设:32位二进制数Z为A×216+B,其中:A和B都是16位二进制数。用10去除A,得:A=A1×10+A2,于是,        (1) 假设A2×216+B被10除后所得的商和余数分别为B1和C1(B1≥0,C1≥0)。... [阅读全文]
<< < 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 > 共797条 分27页