c语言中1/2表示用整数1除以整数2,因为两者都是整数,其运算结果为0。
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
扩展资料:
C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它具有自己独特的特点。具体体现在以下三个方面:
其一,广泛性。C 语言的运算范围的大小直接决定了其优劣性。C 语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C 语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。
其二,简洁性。9 类控制语句和32个KEYWORDS是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的 *** 作,提高其工作效率,同 时还能够支持高级编程,避免了语言切换的繁琐。
其三,结构完善。C语言是一种结构化语言,它可以通过组建模块单位的形式实现模块化的应用程序,在系统描述方面具有显著优势,同时这一特性也使得它能够适应多种不同的编程要求,且执行效率高。
以下解答仅供参考
-------------------------
1PA=12FA0+015F=130FFH, 选C
----------------------------
2考虑到寻址时IP的作用,选C 变址寄存器
----------------------------
3下面有语法错误的指令是: 不许两个 *** 作数同时是存储器类型
D ADD [BP+2],DA1 (DA1是变量名)
---------------------------------------------
4完成对DX的有符号数除以2的指令是: B SAR DX,1
----------------------------------------
5使进位位置1的指令是: C STC
----------------------------------------
6设AL=-15,要使AL=15应执行的指令是: A NEG AL
------------------------------------------
7在条件转移指令中,结果为负数则转移的指令是: C JS
---------------------------------------------
8下面的XCHG指令中,语法正确的是: B XCHG BL,[BX]
--------------------------------------------
9一条指令中目的 *** 作数不允许使用的寻址方式是:B 立即数寻址
--------------------------------------------
10 设SP=1FFEH,执行下列指令后,SP寄存器的值是: D 1FFEH
----------------------------------------------
11LDS SI,ES:[2000H] 指令的全部功能是: C 把地址2000H字单元内容送SI,把2002H字单元内容送DS
------------------------------------------
12设AL=04H,BL=0F8H,执行MUL BL指令后,结果是: C AX=03E0H
-------------------------------------------
13B DI=0103H,CX=0001H
------------------------------------------------------
14 C 21H
---------------------------------------
15下面指令语句中,语法正确的是: D MOV WORD PTR [BX],5
-------------------------------------------
16 BX中的内容是:A 20H
---------------------------------------------------------
17 能使AX中数据为偶数的语句是: C MOV AL, BYTE PTR ADR+1
----------------------------------------------------------
18 C END START
----------------------------------------------------------
19 A 40H
---------------------------------------------------------
20在下列段寄存器中,代码段寄存器是: B CS
--------------------------------------------------------
下面的有些不是8088的指令集但基本都是相通的 一、数据传送指令
1通用数据传送指令
MOV(Move)传送
PUSH(Push onto the stack)进栈
POP(Pop from the stack)出栈
XCHG(Exchange)交换
MOV指令
格式为: MOV DST,SRC
执行的 *** 作:(DST)<-(SRC)
PUSH进栈指令
格式为:PUSH SRC
执行的 *** 作:(SP)<-(SP)-2
((SP)+1,(SP))<-(SRC)
POP出栈指令
格式为:POP DST
执行的 *** 作:(DST)<-((SP+1),(SP))
(SP)<-(SP)+2
XCHG 交换指令
格式为:XCHG OPR1,OPR2
执行的 *** 作:(OPR1)<-->(OPR2)
2累加器专用传送指令
IN(Input) 输入
OUT(Output) 输出
XLAT(Translate) 换码
这组指令只限于使用累加器AX或AL传送信息
IN 输入指令
长格式为: IN AL,PORT(字节)
IN AX,PORT(字)
执行的 *** 作: (AL)<-(PORT)(字节)
(AX)<-(PORT+1,PORT)(字)
短格式为: IN AL,DX(字节)
IN AX,DX(字)
执行的 *** 作: AL<-((DX))(字节)
AX<-((DX)+1,DX)(字)
OUT 输出指令
长格式为: OUT PORT,AL(字节)
OUT PORT,AX(字)
执行的 *** 作: (PORT)<-(AL)(字节)
(PORT+1,PORT)<-(AX)(字)
短格式为: OUT DX,AL(字节)
OUT DX,AX(字)
执行的 *** 作: ((DX))<-(AL)(字节)
((DX)+1,(DX))<-AX(字)
在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来 传送信息
XLAT 换码指令
格式为: XLAT OPR
或: XLAT
执行的 *** 作:(AL)<-((BX)+(AL))
3有效地址送寄存器指令
LEA(Load effective address)有效地址送寄存器
LDS(Load DS with Pointer)指针送寄存器和DS
LES(Load ES with Pointer)指针送寄存器和ES
LEA 有效地址送寄存器
格式为: LEA REG,SRC
执行的 *** 作:(REG)<-SRC
指令把源 *** 作数的有效地址送到指定的寄存器中
LDS 指针送寄存器和DS指令
格式为: LDS REG,SRC
执行的 *** 作:(REG)<-(SRC)
(DS)<-(SRC+2)
把源 *** 作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中该指令常指定SI寄存器
LES 指针送寄存器和ES指令
格式为: LES REG,SRC
执行的 *** 作: (REG)<-(SRC)
(ES)<-(SRC+2)
把源 *** 作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中该指令常指定DI寄存器
4标志寄存器传送指令
LAHF(Load AH with flags)标志送AH
SAHF(store AH into flags)AH送标志寄存器
PUSHF(push the flags) 标志进栈
POPF(pop the flags) 标志出栈
LAHF 标志送AH
格式为: LAHF
执行的 *** 作:(AH)<-(PWS的低字节)
SAHF AH送标志寄存器
格式为: SAHF
执行的 *** 作:(PWS的低字节)<-(AH)
PUSHF 标志进栈
格式为: PUSHF
执行的 *** 作:(SP)<-(SP)-2
((SP)+1,(SP))<-(PSW)
POPF 标志出栈
格式为: POPF
执行的 *** 作:(PWS)<-((SP)+1,(SP))
(SP)<-(SP+2)
二、算术指令
1加法指令
ADD(add)加法
ADC(add with carry)带进位加法
INC(increment)加1
ADD 加法指令
格式: ADD DST,SRC
执行的 *** 作:(DST)<-(SRC)+(DST)
ADC 带进位加法指令
格式: ADC DST,SRC
执行的 *** 作:(DST)<-(SRC)+(DST)+CF
ADD 加1指令
格式: INC OPR
执行的 *** 作:(OPR)<-(OPR)+1
2减法指令
SUB(subtract)减法
SBB(subtract with borrow)带借位减法
DEC(Decrement)减1
NEG(Negate)求补
CMP(Compare)比较
SUB 减法指令
格式: SUB DST,SRC
执行的 *** 作:(DST)<-(DST)-(SRC)
SBB 带借位减法指令
格式: SBB DST,SRC
执行的 *** 作:(DST)<-(DST)-(SRC)-CF
DEC 减1指令
格式: DEC OPR
执行的 *** 作:(OPR)<-(OPR)-1
NEG 求补指令
格式: NEG OPR
执行的 *** 作:(OPR)<- -(OPR)
CMP 比较指令
格式: CMP OPR1,OPR2
执行的 *** 作:(OPR1)-(OPR2)
该指令与SUB指令一样执行减法 *** 作,但不保存结果,只是根据结果设置条件标志西半球
3乘法指令
MUL(Unsigned Multiple)无符号数乘法
IMUL(Signed Multiple)带符号数乘法
MUL 无符号数乘法指令
格式: MUL SRC
执行的 *** 作:
字节 *** 作数:(AX)<-(AL)(SRC)
字 *** 作数:(DX,AX)<-(AX)(SRC)
IMUL 带符号数乘法指令
格式: IMUL SRC
执行的 *** 作:与MUL相同,但必须是带符号数,而MUL是无符号数
4除法指令
DIV(Unsigned divide)无符号数除法
IDIV(Signed divide)带符号数除法
CBW(Convert byte to word)字节转换为字
CWD(Contert word to double word)字转换为双字
DIV 无符号数除法指令
格式: DIV SRC
执行的 *** 作:
字节 *** 作:(AL)<-(AX)/(SRC)的商
(AH)<-(AX)/(SRC)的余数
字 *** 作: (AX)<-(DX,AX)/(SRC)的商
(AX)<-(DX,AX)/(SRC)的余数
IDIV 带符号数除法指令
格式: DIV SRC
执行的 *** 作:与DIV相同,但 *** 作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同
CBW 字节转换为字指令
格式: CBW
执行的 *** 作:AL的内容符号扩展到AH即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH
CWD 字转换为双字指令
格式: CWD
执行的 *** 作:AX的内容符号扩展到DX即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH
这两条指令都不影响条件码
三、逻辑指令
1逻辑运算指令
AND(and) 逻辑与
OR(or) 逻辑或
NOT(not) 逻辑非
XOR(exclusive or)异或
TEST(test) 测试
AND 逻辑与指令
格式: AND DST,SRC
执行的 *** 作:(DST)<-(DST)^(SRC)
OR 逻辑或指令
格式: OR DST,SRC
执行的 *** 作:(DST)<-(DST)V(SRC)
NOT 逻辑非指令
格式: NOT OPR
执行的 *** 作:(OPR)<-(OPR)
XOR 异或指令
格式: XOR DST,SRC
执行的 *** 作:(DST)<-(DST)V(SRC)
TEST 测试指令
格式: TEST OPR1,OPR2
执行的 *** 作:(DST)^(SRC)
两个 *** 作数相与的结果不保存,只根据其特征置条件码
2移位指令
SHL(shift logical left) 逻辑左移
SAL(shift arithmetic left) 算术左移
SHR(shift logical right) 逻辑右移
SAR(shift arithmetic right) 算术右移
ROL(Rotate left) 循环左移
ROR(Rotate right) 循环右移
RCL(Rotate left through carry) 带进位循环左移
RCR(Rotate right through carry) 带进位循环右移
格式: SHL OPR,CNT(其余的类似)
其中OPR可以是除立即数以外的任何寻址方式移位次数由CNT决定,CNT可以是1或CL
循环移位指令可以改变 *** 作数中所有位的位置;移位指令则常常用来做乘以2除以2 *** 作其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2
四、串处理指令
1与REP相配合工作的MOVS,STOS和LODS指令
REP重复串 *** 作直到(CX)=0为上
格式: REP string primitive
其中String Primitive可为MOVS,LODS或STOS指令
执行的 *** 作:
1)如(CX)=0则退出REP,否则往下执行
2)(CX)<-(CX)-1
3)执行其中的串 *** 作
4)重复1)~3)
MOVS 串传送指令
格式:可有三种
MOVS DST,SRC
MOVSB(字节)
MOVSW(字)
其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在 *** 作数中表明是字还是字节 *** 作,例如:
MOVS ES:BYTE PTR[DI],DS:[SI]
执行的 *** 作:
1)((DI))<-((SI))
2)字节 *** 作:
(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1
当方向标志DF=0时用+,当方向标志DF=1时用-
3)字 *** 作:
(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2
当方向标志DF=0时用+,当方向标志DF=1时用-
该指令不影响条件码
CLD(Clear direction flag)该指令使DF=0,在执行串 *** 作指令时可使地址自动增量;
STD(Set direction flag)该指令使DF=1,在执行串 *** 作指令时可使地址自动减量
STOS 存入串指令
格式: STOS DST
STOSB(字节)
STOSW(字)
执行的 *** 作:
字节 *** 作:((DI))<-(AL),(DI)<-(DI)+-1
字 *** 作: ((DI))<-(AX),(DI)<-(DI)+-2
该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中
LODS 从串取指令
格式: LODS SRC
LODSB
LODSW
执行的 *** 作:
字节 *** 作:(AL)<-((SI)),(SI)<-(SI)+-1
字 *** 作: (AX)<-((SI)),(SI)<-(SI)+-2
该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容指令允许使用段跨越前缀来指定非数据段的存储区该指令也不影响条件码
一般说来,该指令不和REP联用有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令
2与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令
REPE/REPZ 当相等/为零时重复串 *** 作
格式: REPE(或REPZ) String Primitive
其中String Primitive可为CMPS或SCAS指令
执行的 *** 作:
1)如(CX)=0或ZF=0(即某次比较的结果两个 *** 作数不等)时退出,否则往下执行
2)(CX)<-(CX)-1
3)执行其后的串指令
4)重复1)~3)
REPNE/REPNZ 当不相等/不为零时重复串 *** 作
格式: REPNE(或REPNZ) String Primitive
其中String Primitive可为CMPS或SCAS指令
执行的 *** 作:
除退出条件(CX=0)或ZF=1外,其他 *** 作与REPE完全相同
CMPS 串比较指令
格式: CMP SRC,DST
CMPSB
CMPSW
执行的 *** 作:
1)((SI))-((DI))
2)字节 *** 作:(SI)<-(SI)+-1,(DI)<-(DI)+-1
字 *** 作: (SI)<-(SI)+-2,(DI)<-(DI)+-2
指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同
SCAS 串扫描指令
格式: SCAS DST
SCASB
SCASW
执行的 *** 作:
字节 *** 作:(AL)-((DI)),(DI)<-(DI)+-1
字 *** 作: (AL)-((DI)),(DI)<-(DI)+-2
该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码指令的其他特性和MOVS的规定相同
如果你的精度不是特别高,有个很简单的办法,就是直接将20H当做结果。
原因是除以255近似为除以256,这就相当于将这两个字节右移八位,结果就是
原先的20H的内容。这样的精度与准确值相差05%。
CPU 执行除法指令(如:DIV CX、DIV BL)时,是有可能溢出的。
如果被除数较大,或除数较小,都可能使“商”超出预定位数,此时,就会溢出。
特别是当除数为零时,必然会出现:Divide overflow。
直接使用 DIV 指令,有一定的风险,一不小心就溢出了。
特别是数字不明确的时候。
因此,在执行 DIV 指令之前,应该加以判断,以免发生溢出。
一般来说,当被除数的高位,小于除数时,就不会发生“溢出”。
如果高位为零,比如 DX = 0,这就肯定不会溢出。
-----------------------
较好的方法是:编写一个“不会溢出”的除法程序。
方法思路如下:
在右图中,
被除数:1A 2B 3C 4DH,有 32 位数。
除数是:BL,仅有 8 位数。
商,是:32 位数。
按照图中的步骤,需要执行四次 DIV BL。
只要 BL 不为零,就绝对不会发生溢出。
按此思路,被除数的字节数,可以继续增加,仅受制于内存的大小。
这就是说:被除数,可以认为是无限的。
以上就是关于c语言中1/2是什么意思全部的内容,包括:c语言中1/2是什么意思、汇编语言的几道题目,请各位高手帮忙看看,谢谢!!很急、8088简单汇编指令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)