(1)源操作数与目的操作数类型不匹配.
钱晓捷新版汇编语言程序设计习题答案(1-4)

钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.17、举例说明CF和OF标志的差异。
溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:3AH + 7CH=B6H无符号数运算:58+124=182,范围内,无进位有符号数运算: 58+124=182 ,范围外,有溢出•例2:AAH + 7CH=(1)26H无符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28 ,范围内,无溢出1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?(解答)代码段(Code Segment)用来存放程序的指令序列。
处理器利用CS : IP取得下一条要执行的指令•堆栈段(Stack Segment)确定堆栈所在的主存区域。
处理器利用SS : SP操作堆栈中的数据•数据段(Data Segment)存放当前运行程序所用的数据。
处理器利用DS : EA存取数据段中的数据•附加段(Extra Segment)是附加的数据段,也用于数据的保存。
处理器利用ES : EA存取数据段中的数据第二章8086指令系统2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1) mov ax,1200h ;AX=1200h(2) mov ax,bx ; AX=0100h(3) mov ax,[1200h] ; AX=4C2Ah(4) mov ax,[bx] ; AX=3412h(5) mov ax,[bx+1100h] ; AX=4C2Ah(6) mov ax,[bx+si] ; AX=7856h(7) mov ax,[bx][si+1100h] ; AX=65B7h2.2指出下列指令的错误(1) mov cx,dl 两操作数类型不匹配(2) mov ip,ax IP 指令指针禁止用户访问(3) mov es,1234h 立即数不允许传给段寄存器(4) mov es,ds 段寄存器之间不允许传送(5) mov al,300 两操作数类型不匹配(6) mov [sp],ax 目的操作数应为[ BP ](7) mov ax,bx+di 源操作数应为 [BX+DI](8) mov 20h,ah 立即数不能作目的操作数2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
汇编程序MASM错误信息

汇编程序MASM 5.0编译出错信息表-中文说明用MASM 5.0对汇编程序进行汇编的时候,如果检查出某行语句有错误,就会在屏幕上给出出错信息,若指定了列表文件(.LST),MASM 5.0也会在列表文件中给出错误信息。
MASM5.0出错信息格式: WARNING/ERROR错误信息码:错误描述信息错误描述信息码由五个字符组成,第一个是字母A,表示汇编语言程序出错;接着有一个数字指明出错类别:2为致命错误,4为严肃警告,5为建议性警告,最后三位为错误编号。
下面的手册中给出了错误编号、错误描述以及中文解释说明,方便大家查阅,包括MASM 5.0常见编译错误。
000 Block nesting error嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局001 Extra characters on line一语句行有多余字符,可能是语句中给出的参数太多002 Internal error-Register already defined这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与Microsoft公司联系003 Unkown type specifer未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等004 Redefinition of symbol符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出这个错误005 Symbol is multidefined符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误006 Phase error between passes两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.若在启动MASM时使用/D任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误007 Already had ELSE clause已有ELSE语句.在一个条件块里使用多于一个的ELSE语句008 Must be in conditional block没有在条件块里.通常是有ENDIF或ELSE语句,而无IF 语句009 Symbol not defined符号未定义,在程序中引用了未定义的标识符010 Syntax error语法错误.不是汇编程序所能识别的一个语句011 Type illegal in context指定非法类型.例如对一个过程指定BYTE类型,而不是NEAR或FAR012 Group name must be unique组名应是唯一的.作为组名的符号作为其他符号使用013 Must be declared during pass 1必须在第一遍扫描期间定义.在第一遍扫描期间,如一个符号在未定义前就引用,就会出现这种错误.014 Illegal public declaration一个标识符被非法的指定为PUBLIC类型015 Symbol already defferent kind重新定义一个符号为不同种类符号.例如一个段名重新被当作变量名定义使用016 Reserved word used as symbol把汇编语言规定的保留字作标识符使用017 Forward reference illegal非法的向前引用.在第一遍扫描期间,引用一个未定义符号.018 Operand must be register操作数位置上应是寄存器,但出现了标识符019 Wrong type of register使用寄存器出错020 Operand must be segment or group应该给出一个段名或组名.例如ASSUME语句中应为某段寄存器和指定一个段名或组名,而不应是别的标号或变量名等021 Symbol has no segment不知道标识符的段属性022 Operand must be type specifier操作数应给出类型说明,如NEAR,FAR,BYTE等023 Symbol alread defined locally以被指定为内部的标识符,企图在EXTRN语句中又定义外部标识024 Segment paraneters are changed段参数被改变.如同一标识符定义在不同段内025 Improper align/combin type段定义时的定位类型/组合类型使用出错026 Reference to multidefined symbol指令引用了多重定义的标识符027 Operand expected需要一个操作数,只有操作符028 Operator expected需要一个操作符,但只有操作数029 Divdsion by 0 or overflow除以0或溢出030 Negative shift count运算符SHL或SHR的移位表达式值为负数031 Operand type must match操作数类型不匹配.双操作数指令的两个操作数长度不一致,一个是字节,一个是字032 Illegal use of external外部符号使用出错033 Must be record field name应为记录字段名.在记录字段名位置上出现另外的符号034 Must be record name or field name应为记录名或记录字段名.在记录名或记录字段名位置上出现另外的符号035 Operand must have size应指明操作数的长度(如BYTE,WORD等).通常使用PTR运算即可改正036 Must be variable,label,or constant应该是变量名,标号,或常数的位置上出现了其他信息037 Must be stucture field name应该为结构字段名.在结构字段名位置上出现了另外的符号038 Lefe operand must segment操作数的左边应该是段的信息.如设DA1,DA2均是变量名,下列语句就是错误的:"MOV AX,DA1:DA2".DA1位置上应使用某段寄存器名039 One operand must constant操作数必须是常数.040 Operand must be in same segment or one constant—运算符用错.例如"MOV AL,—VAR",其中VAR是变量名,应有一常数参加运算.又如两个不同段的变量名相减出错041 Normal type operand expected要求给出一个正常的操作数.042 Constant expected要求给出一个常数.043 Operand must have segment运算符SEG用错.044 Must be associated with data在必须与数据段有关的位置上出现了代码段有关的项045 Must be associated with code在必须与代码段有关的位置上出现了数据段有关的项046 Multiple base registers同时使用了多个基址寄存器.如"MOV AX ,[SI][BP]"047 Multiple index registers同时使用了多个变址寄存器.如"MOV AX ,[SI][DI]"048 Must be index or base register指令仅要求使用基址寄存器或变址寄存器,而不能使用其他寄存器.049 Illegal use of register非法使用寄存器出错050 Value is out of range数值太大,超过允许值.例如:"MOV AL ,100H"051 Operand not in current CS ASSUME segment操作数不在当前代码段内.通常指转移指令的目标地址不在当前CS段内052 Improper operand type操作数类型使用不当.例如:"MOV VAR1,VAR2".两个操作数均为存储器操作数,不能汇编出目标代码053 Jump out of range by %ld byte条件转移指令跳转范围超过-128~ 127个字节.出错厂,信息同时给出超过的字节数054 Index displacement must be constant变址寻址的位移量必须是常数055 Illegal register value非法的寄存器值.目标代码中表达寄存器的值超过7056 Immediate mode illegal不允许使用立即数寻址.例如"MOV DS,CODE"其中CODE是段名,不能把段名作为立即数传送给段寄存器DS057 Illegal size for operand使用操作数大小(字节数)出错.例如:使用双字的存储器操作数058 Byte register illegal要求用字寄存器的指令使用了字节寄存器.如PUSH,POP指令的操作数寄存器必须是字寄存器059 Illegal uer of CS register指令中错误使用了段寄存器CS.如:"MOV CS,AX"CS不能做目的操作数060 Must be accumulator register要求用AX或AL的位置上使用可其他寄存器.如IN,OUT指令必须使用累加器AX或AL 061 Improper uer of segment register不允许使用段寄存器的位置上使用了段寄存器.如"SHL DS,1"062 Missing or unreachable CS试图跳转去执行一个CS达不到的标号.通常是指缺少ASSUME语句中CS与代码段相关联063 Operand combination illegal双操作数指令中两个操作数组合出错064 Near JMP/CALL to different CS试图用NEAR属性的转移指令跳转到不在当前段的一个地址065 Label cannot have segment override段前缀使用出错066 Must have instuction agter prefix在重复前缀REP,REPE,REPNE后面必须有指令067 Cannot override ES for destination串操作指令中目的操作数不能用其他段寄存器替代ES068 Cannot address with srgment register指令中寻找一个操作数,但ASSUME语句中未指明哪个段寄存器与该操作数所在段有关联069 Must be in segment block指令语句没有在段内070 Cannot use EVEN or ALIGN with byte alignment在段定义伪指令的定位类型中选用BYTE,这时不能使用EVEN或ALIGN伪指令071 Forward needs override or FAR转移指令的目标没有在源程序中说明为FAR属性,可用PTR指定072 Illegal value for DUP count操作符DUP前的重复次数是非法的或未定义073 Symbol id already external在模块内试图定义的符号,它已在外部符号伪指令中说明074 DUP nesting too deep操作数DUP的嵌套太深075 Illegak use of undefinde operand( )不定操作符" "使用不当.例如"DB 10H DUP( 2)"076 Too many valer for struc or record initialization在定义结构变量或记录变量时,初始值太多077 Angle brackets requored around initialized list定义结构体变量时,初始值未用尖括号()括起来078 Directive illegal structure在结构体定义中的伪指令使用不当.结构定义中的伪指令语句仅二种:分号(;)开始的注释语句和用DB,DW等数据定义伪指令语句079 Override with DUP illegal在结构变量初始值表中使用DUP操作符出错080 Field cannot be overridden在定义结构变量语句中试图对一个不允许修改的字段设置初值081 Override id of wrong type在定义结构变量语句中设置初值时类型出错083 Circular chain of EQU aliases用等值语句定义的符号名,最后又返回指向它自己.如: A EQU B B EQU A084 Cannot emulate cooprocessor opcode仿真器不能支持的8087协处理器操作码085 End of file,not END directive源程序文件无END文件086 Data emitted with no segment语句数据没有在段内087 Forced error---pass1用.ERR1伪指令强制形成的错误088 Forced error---pass2用.ERR2伪指令强制形成的错误089 Forced error用.ERR伪指令强制形成的错误090 Forced error---expression true(0)用.ERRZ伪指令强制形成的错误091 Forced error---pression false(not 0)用.ERRZ伪指令强制形成的错误092 Forced error---symbol not defined用.ERRNDEF伪指令强制形成的错误093 Forced error---symbol defined用.ERRDEF伪指令强制形成的错误094 Forced error---string blank用.ERRB伪指令强制形成的错误095 Forced error---string not blank用.ERRNB伪指令强制形成的错误096 Forced error---string identical用.ERRIDN伪指令强制形成的错误097 Forced error---string different用.ERRDIF伪指令强制形成的错误098 Wrong length for override value结构域的重新设置太大以致不能适合这个域099 Line too long expanding symbol:EQU使用EQU伪指令定义的等式太长100 Impure memory reference不合适的处理器参考,当/P选项和特权指令有效时(用.286或.386),数据存到代码段101 Missing data;zero assumed缺少操作数,假定是0。
汇编语言试题(有答案))

汇编语言试题及参答案一、填空题1.ZF标志位是标志结果是否为零的,若结果,ZF为(1),否则ZF为(0)。
当ZF为1时,SF为(0)2.标号可以有两种类型属性。
它们是(近程)和(远程)3.8位无符号整数的表示范围为0--255,写成16进制形式为(0--FFH),8位有符号整数的表示范围为-128--+127,写成16进制形式为(80H--7FH)4.伪指令DB,GROUP 和NAME 三个标号名字域必须有名字的是(GROUP),不得有名字的是(NAME),可有可无名字的是(DB)。
5.循环程序通常由(循环准备)(循环体)(循环的控制与修改)和循环结果外理四部分构成6.在数值不达式中,各种运算符可可混合使用,其优先次序规则*,/(高)于+,-;XOR,OR(低)于AND,LT(等)于GT7. 宏指令定义必须由伪指令(MACRO)开始,伪指令(ENDM)结束,两者之间的语句称为(宏定义体)8.调用程序与子程序之间的参数传递方法有四种,即堆栈法(约定寄存器法)(约定存储单元法)(向量传递法)9.分别用一条语句实现下述指明的功能(1)栈顶内容弹出送字变量AYW(POP AYW)(2)双字变量AYD存放的地址指针送ES和SI(LES SI,AYD)(3)变量AY2类型属性送AH(MOV AH,TYPE AY2)(4)不允许中断即关中断(CLI)(5)将字符串‘HOW ARE YOU!’存入变量AYB(AYB DB“HOW ARE YOU!”)(6)子程序返回调用程序(RET)(7)地址表达式AYY[4]的偏移地址送字变量ADDR(MOV ADDR,OFFSET AYY[4])(8)AX的内容加1,要求不影响CF(INC AX)(9)BX的内容加1,要求影响所有标志位(ADD BX,1)(10)若操作结果为零转向短号GOON(JZ GOON)二、单选题1.IBM PC微机中,有符号数是用(2 )表示的1.原码2.补码3.反码4.BCD码2.把汇编源程序变成代码程序的过程是(2 )1.编译2.汇编3.编辑4.链接三、己知:VAR1,VAR2的类型属性分别为字和字节,标号LPFAR的类型属性为FAR。
微机原理课后习题参考答案

微机原理课后习题参考答案第1部分微型计算机基础知识1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同?【解】微处理器:指计算机内部对数据进行处理并对处理过程进行控制的部件,伴随着大规模集成电路技术的迅速发展,芯片集成密度越来越高,CPU可以集成在一个半导体芯片上,这种具有中央处理器功能的大规模集成电路器件,被统称为“微处理器”。
微型计算机:简称“微型机”、“微机”,也称“微电脑”。
由大规模集成电路组成的、体积较小的电子计算机。
由微处理机(核心)、存储片、输入和输出片、系统总线等组成。
特点是体积小、灵活性大、价格便宜、使用方便。
微型计算机系统:简称“微机系统”。
由微型计算机、显示器、输入输出设备、电源及控制面板等组成的计算机系统。
配有操作系统、高级语言和多种工具性软件等。
1.2 CPU在内部结构上由哪几部分组成?CPU应该具备哪些主要功能?【解】CPU在内部结构上由运算器、控制器、寄存器阵列和内部总线等各部分构成,其主要功能是完成各种算数及逻辑运算,并实现对整个微型计算机控制,为此,其内部又必须具备传递和暂存数据的功能。
1.3 微型计算机采用总线结构有什么优点?【解】①简化了系统结构,便于系统设计制造;②大大减少了连线数目,便于布线,减小体积,提高系统的可靠性;③便于接口设计,所有与总线连接的设备均采用类似的接口;④便于系统的扩充、更新与灵活配置,易于实现系统的模块化;⑤便于设备的软件设计,所有接口的软件就是对不同的口地址进行操作;⑥便于故障诊断和维修,同时也降低了成本。
总线的逻辑电路有些是三态的,即输出电平有三种状态:逻辑“0”,逻辑“1”和“高阻”态。
1.4计算机总线有哪些,分别是什么?【解】总线按其信号线上传输的信息性质可分为三组:①数据总线,一般情况下是双向总线;②地址总线,单向总线,是微处理器或其他主设备发出的地址信号线;③ 控制总线,微处理器与存储器或接口等之间1.5 数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用一套总线或者合用部分总线,那么要靠什么来区分地址和数据?【解】数据总线(DB)为双向结构,数据在CPU与存储器或I/O 接口之间的传送是双向的,(数据既可以读也可以写),其宽度通常与微处理器的字长相同。
1微型计算机原理与接口技术__课后答案_(邹逢兴_著)_清华大学出版社

2.14 解: (BP)=4433H,(SP)=1022H,
2.15 1. ( CL ) = 0F6H 2. [1E4F6H] = 78H 3. ( BX ) = 0056H , ( AX ) = 1E40H
3
4. ( SI ) = 00F6H , [ SI ] = 0024H 5. ( AX ) = 5678H , [ 09226H ] = 1234H
;'0D’→ CR 键,’0AH’
→ LF 键
;PLUS:正数的个数。
;ZERO: 0 的个数。
DATA
ENDS
;MINUS:负数的个数。
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
;给 DS 赋初值,
MOV DS, AX
;建立其数据段的寻址性。
2) 将 ES 段从 EA = 0100H 开始的 128 个字单元清 0。
2.35 解:
MIN: MOV BX, ?1
;3000H
MOV AL, [BX]
MOV CX, ?2
;100H
LP1: INC BX
CMP AL, [BX]
?3 LP2
;JLE
MOV AL, [BX]
LP2: DEC CX
JNZ ?4
MOV MOV XOR NEXT: CMP
CX, 18 SI, 00H BX, BX ARRAY[SI], 00H
JS M_PRO
JZ Z_PRO
P_PRO: INC D_SUM
INC MOV MOV MOV JMP
P_SUM+5 AL, ARRAY[SI] BL, P_SUM+5 (P_ARR-1) [BX], AL NEXT1
专升本《汇编语言程序设计》_试卷_答案

专升本《汇编语言程序设计》一、(共75题,共150分)1. 下列说法错误的是_________。
(2分)A.机器指令的形式包含操作码和地址码B.计算机只能够识别规定好的机器指令C.不同计算机系统之间的机器指令能够相互兼容D.汇编语言的主要操作和机器指令基本上一一对应标准答案:C2. 两个有符号数相减,通过标志位_________判断结果是否溢出。
(2分)标准答案:D3. 汇编语言和高级语言的比较,下列说法错误的是_________ (2分)A.汇编语言和高级语言都不能被机器直接识别B.完成同样的功能,汇编语言占据空间小C.高级语言可以使用变量,但汇编语言不行D.汇编语言中有类似于高级语言的宏功能标准答案:C4. 下列寄存器中,哪个寄存器不能供汇编程序直接访问________. (2分)标准答案:D5. 下列寄存器,哪个不能作基址寄存器________。
(2分)标准答案:C6. 设有关寄存器及存储单元的内容如下:则指令MOV AX, 1100H[BX][SI]执行完毕后,AX寄存器中的值是_________。
(2分)标准答案:A7. 常量的用途中,哪个说法是错误的_________。
(2分)A.可以作立即寻址的操作数B.也可作某些存贮器操作数的的位移量组成部分C.在数据定义伪指令语句中给变量赋初值D.可以作目的操作数标准答案:D8. 若(ECX)=0ABCD1234H (BL)=0E3H,则语句MOVSX ECX,BL执行后:(ECX)的值为_________。
(2分)标准答案:B9. 若(AX)=0FFFDH,则语句ADD AX,7FFFH执行后,下列说法正确的是_________。
(2分)A.(AX)=7FFCH,(OF)=1,(CF)=1B.(AX)=17FFCH,(OF)=1,(CF)=1C.(AX)=7FFCH,(OF)=0,(CF)=1D.(AX)=17FFCH,(OF)=0,(CF)=1标准答案:C10. 在语句INC SS:[BX]中,操作数使用的段寄存器是_________。
mfc 标准表达式中数据类型不匹配
mfc 标准表达式中数据类型不匹配当你在MFC(Microsoft Foundation Classes)或其他C++编程环境中遇到“数据类型不匹配”的错误,这通常意味着你在某处尝试将一种数据类型用作另一种不兼容的数据类型。
以下是一些可能导致此错误的常见原因和解决方法:类型转换错误:如果你尝试将一个整数转换为字符串,但没有正确地进行转换,你可能会遇到这种错误。
解决方法:使用适当的转换函数,如std::to_string或std::stringstream。
函数参数不匹配:如果你调用一个函数并传递了错误类型的参数,你可能会收到此错误。
解决方法:检查函数的声明,确保你传递的参数类型与函数期望的参数类型匹配。
操作符重载问题:如果两个对象类型都重载了某个操作符,并且这两个对象的类型不兼容,你可能会看到此错误。
解决方法:检查重载的操作符,并确保它们的用法是正确的。
容器或数组的使用:如果你尝试从容器中获取或修改元素,但使用的索引或迭代器类型与容器中的元素类型不匹配,你可能会看到此错误。
解决方法:确保你使用的索引、迭代器或指针的类型与容器中的元素类型匹配。
模板编程问题:在模板编程中,如果你尝试使用不兼容的类型作为模板参数,你可能会看到此错误。
解决方法:确保模板参数的类型与预期的使用场景相匹配。
外部库或框架:如果你的代码与外部库或框架的某些部分不兼容,特别是数据类型方面,你可能会看到此错误。
解决方法:检查外部库或框架的文档,确保你正确地使用了它们。
编译器或环境问题:有时,编译器或开发环境的问题也可能导致此类错误。
解决方法:尝试更新编译器或开发环境,或者查看相关的官方文档和社区支持。
为了更准确地诊断和解决问题,最好查看具体的错误消息和代码上下文。
这通常会提供关于哪个部分或哪一行代码导致错误的更多信息。
微机原理期末重点总结
第一章1.微型计算机(Microcomputer):采用微处理器为核心构造的计算机2.微处理器(Microprocessor):微型机的运算和控制核心,称为中央处理单元(CPU:Central Processing Unit),将控制器和运算器集成在一片或几片芯片上构成3.微型计算机(MicroComputer)是指以微处理器为核心,配上存储器、输入/输出接口电路等所组成的计算机。
4.微型计算机系统(Micro Computer System)是指以微型计算机为中心,配以相应的外围设备、电源和辅助电路(统称硬件)以及指挥计算机工作的系统软件所构成的系统。
5.总线:计算机中各功能部件间传送信息的公共通道,是微型计算机的重要组成部分。
5.1地址总线AB:在对存储器或I/O端口进行访问时,通过地址总线传送由CPU提供的要访问存储单元或I/O端口的地址信息。
(单向总线)数据总线DB:从存储器取指令或读写操作数,对I/O端口进行读写操作时,指令码或数据信息通过数据总线传输。
(双向总线)控制总线:各种控制或状态信息通过控制总线传输6. 基数(Radix):一个数制所包含的数字符号的个数,被称为基数,记为r。
7.在二进制计数系统中,最高位表示符号位,“0”表示正数,“1”表示负数,其余表示数值。
7.1补码:反码末位(包括小数)加17.2由原码直接求补码:二进制数低位(包括小数)的第一个1右边保持不变(包含此1),左边依次求反8.BCD码用4位二进制数表示1位十进制数,只取十个状态,而且每四个二进制码之间是“逢十进一”。
(常使用8421码:即0000~1001)8.1“0~9”的ASCII码是30H~39H“A~Z”的ASCII码是41H~5AH“a~z”的ASCII码是61H~7AH第二章1.总线接口单元BIU:取指令时,BIU负责从内存的指定地址处取出指令,送到指令队列流中排队,执行指令中需要操作数时,也由BIU从内存的指定地址中取出,送给EU参加运算。
微机原理与接口技术复习题1-5(答案)
复习题1:1、指出下列指令的错误(1)MOV AH,BX(2)MOV [BX],[SI](3)MOV AX,[SI] [DI](4)MOV MYDAT [BX] [SI],ES:AX(5)MOV BYTE PTR [BX],1000(6)MOV BX,OFFSET MYDAT[SI](7)MOV CS,AX(8)SAL AL, 5答案:(1)MOV AH,BX 源操作数与目的操作数长度不相同(2)MOV [BX],[SI] 这是两个内存单元在传递数据,而这在汇编语言中是不允许的。
不允许两内存单元同时作为源操作数和目的操作数进行运算(3)MOV AX,[SI] [DI] 不能用两个变址连用,其中一个应为基址BX或BP (4)MOV MYDAT [BX] [SI],ES:AX 同(2)(5)MOV BYTE PTR [BX],1000源操作数与目的操作数长度不相同,1000D=3E8H (6)MOV BX,OFFSET MYDAT [SI] OFFSET不能与复杂操作数相连(7)MOV CS,AX ,不能对CS赋值(8)MOV CL,5SAL AL,CL2、下面哪些指令是非法的?(假设OP1,OP2是已经用DB定义的变量)(1)CMP 15,BX(2)CMP OP1,25(3)CMP OP1,OP2(4)CMP AX,OP1答案(1)非法(2)合法(3)非法(4)非法3、假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?(1)MOV BP,AL(2)MOV WORD_OP [BX+4*3] [DI],SP(3)MOV WORD_OP1, WORD_OP2(4)MOV AX, WORD_OP1 [DX](5)MOV SAVE_WORD, DS(6)MOV SP, SS:DATA_WORD [BX] [SI](7)MOV AX, [WORD_OP1+WORD_OP2](8)MOV AX, [WORD_OP1-WORD_OP2+100](9)MOV [WORD_OP1], [WORD_OP1-WORD_OP2]答案:(1)非法,操作数类型不同。
VFP上机操作常见错误总结
一、输入命令时常见错误分析1、不能识别的命令谓词产生原因:(1)关键词拼写错误(2)命令动词与短语、短语中各单词之间没有用空格隔开(3)命令动词、短语中的英文单词、运算符号和标点符号等在全角状态下输入(4)在一行内输入多条命令(5)将一条命令多行输入时中途换行没有分号“;”2、找不到变量产生原因:(1)命令动词与短语、短语中各单词之间没有用空格隔开(2)命令动词、短语中的英文单词在全角状态下输入3、语法错误/命令中缺少必要的字句产生原因:(1)语句的结构不完整(2)运算符和标点符号是在全角状态下输入或为中文符号4、嵌套错误产生原因:(1)关键词缺少配对,如有if却没有end if,有for却没有end for(2)配对关键词的个数不相等5、操作符/操作数类型不匹配产生原因:运算符两边的变量或数据类型不一致6、缺少函数参数的值、类型或数目无效产生原因:函数参数的个数不对或传递的参数类型不对7、某某文件不存在产生原因:(1)没有设置默认路径(2)要打开的表文件或菜单文件没有存放在默认目录下(3)调用没有定义的函数或过程二、创建表文件时常见错误分析1、没有设置默认路径不少考生在事先没有用SET DEFAULT TO命令设置好当前盘当前目录的情况下进行考试 ,结果所创建的文件未能按要求存入指定盘指定目录中,由此常常导致上机操作考试失败。
2、创建表文件时忽略了小数点和消失位数也包含在字段宽度之内的事实。
导致输入数据时产生溢出。
3、在Visual FoxPro 中,A~Z单个英文字母已被专门用作工作区的别名,用户不能在用他们作为表文件名。
错误提示:“别名已被使用”。
三、记录操作时常见错误分析1、记录的显示单纯显示表记录的命令主要有LIST和DISPLAY两个。
LIST连续 (集中 )显示表记录,当命令中的" <记录范围 >"和" <条件 >"均缺省时 ,LIST显示所有记录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.1 (1)源操作数与目的操作数类型不匹配 (2)两个操作数同为内存操作数 (3)两个操作数同为内存操作数 (4)操作数不是16位 (5)目的操作数是立即数 (6)用CS作目的操作数 (7)指令中移位次数大于1 (8)给段寄存器DS直接送立即数 (9)在两个段寄存器之间传送数据 (10)源操作数、目的操作数类型不匹配 6.2 (1)(DX)= 0096H (2)(DX)= 0069H (3)(DX)= 00FFH (4)(DX)= 00EEH (5)(DX)= 0008H (6)(DX)=00F7H 6.3 (1)(BX)=06CBH (2)(BX)=65A8H (3)(BX)=B65AH (4)(BX)=A9B2H 6.4 (1)(SP)=0FFCH (2)(SP)=1000H,(AX)=5678H 6.5 (AF)= 0,(CF)= 0,(OF)= 0,(PF)= 0,(SF)= 0,(ZF)=0 6.6 (1)DATA SEGMENT w DB 10H X DB 20H Z DB 30H DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV AL,z SUB AL,X SUB AL,w MOV z,AL MOV AH,4CH INT 21H CODE ENDS END START (2)DATA SEGMENT w DB 30H y DB 20H r DB 10H z DB ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV AL,w ADD y,6 ADD r,3 SUB AL,y SUB AL,r MOV z,AL MOV AH,4CH INT 21H CODE ENDS END START (3)DATA SEGMENT a DB 02H b DB 10H c DW ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV AL,a MUL b MOV c,AX MOV AH,4CH INT 21H CODE ENDS END START (4)DATA SEGMENT a DB 02H b DB 10H c DB 06H s DW ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV AL,c MUL c MOV BX,AX MOV AL,a MUL b SUB AX,BX MOV S,AX MOV AH,4CH INT 21H CODE ENDS END START (5)DATA SEGMENT a DB 02H b DB 10H c DW ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV AL,a CBW DIV b MOV c,AX MOV AH,4CH INT 21H CODE ENDS END START (6)DATA SEGMENT x DB 02H y DB 10H w DB ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV AL,x SUB AL,2 SHR AL,1 ADD AL,y MOV w,AL MOV AH,4CH INT 21H CODE ENDS END START 6.7 解: 提示:该问题可直接通过分支程序进行三个数的比较,先作流程图,根据条件决定程序流向。在此借助“冒泡排序”的思想,从第一个数开始,依次将第一个存储单元的数和第二个存储单元的数比较,第二个存储单元的数和第三个存储单元的数比较,若低地址单元的数大于高地址单元的数,则进行交换,否则继续比较。采用循环程序嵌套,外层循环控制比较的次数,内层循环控制比较的个数。 DATA SEGMENT DATA1 DB 30H,20H,40H DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV CX,3 LEA SI,DATA1 MOV BL,0FFH ;设置交换标志 L1:CMP BL,0FFH JNZ OVER MOV BL,00H DEC CX JZ OVER PUSH SI PUSH CX L2:MOV AL,[SI] INC SI CMP AL,[SI] JB L3 XCHG AL,[SI] MOV [SI-1],AL MOV BL,0FFH L3:LOOP L2 POP CX POP SI JMP L1 OVER: MOV AH,4CH INT 21H CODE ENDS END START 6.8 该问题用条件循环程序实现。 DATA SEGMENT n DW ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV AX,1 MOV BX,2 L:CMP AX,100 JAE L1 ADD AX,BX DAA INC BX JMP L L1:DEC BX MOV n,BX MOV AH,4CH INT 21H CODE ENDS END START 6.9 分析:该问题用循环程序实现,循环的次数为100。因为是1~100的累加,所以用循环计数器CX作源操作数,循环初值为100。
DATA SEGMENT SUM DW ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STA START:MOV AX,DATA MOV DS,AX MOV CX,100 MOV AX,0 LOOP1:ADD AX,CX DAA LOOP LOOP1 MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START 6.10 分析:该问题是一个不固定循环次数的循环程序,需要配合条件测试,测试存储区域中的数据是否为0。 DATA SEGMENT BUFF DB 5,1,0,6,8,4 ANS DB ? DATA ENDS STA SEGMENT STACK DB 100 DUP(?) STA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX LEA BX,BUFF ;取存储区首地址 L:MOV AL,[BX] ;取第1个数 INC BX CMP AL,0 ;测试取出的数是否为0 JNE L ;不为0,转L处,继续取下一个数 MOV AL,[BX] ;将0数据后的字节单元内容送ANS MOV ANS,AL MOV AH,4CH INT 21H CODE ENDS END START 6.11