2010级汇编语言典型问题
汇编常见错误解决方法总结

汇编常见错误解决⽅法总结汇编常见错误总结Block nesting error嵌套出错.嵌套的过程,段,结构,宏指令或重复块等⾮正常结束.例如在嵌套语句中有外层的结束语句,⽽⽆内层的结束语局1Extra characters on line⼀语句⾏有多余字符,可能是语句中给出的参数太多2Internal error-Register already defined这是⼀个内部错误.如出现该错误,请记下发⽣错误的条件,并使⽤Product Assistance Request 表与Microsoft公司联系3Unkown type specifer未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等4Redefinition of symbol符号重定义.同⼀标识符在两个位置上定义.在汇编第⼀遍扫描时,在这个标识符的第⼆个定义位置上给出这个错误5Symbol is multidefined符号多重定义.同⼀标识符在两个位置上定义.在汇编第⼆遍扫描时,每当遇到这个标识符都给出这个错误6Phase error between passes两次扫描间的遍错.⼀个标号在⼆次扫描时得到不同的地址值,就会给出这种错误.若在启动MASM时使⽤/D 任选项,产⽣第⼀遍扫描的列表⽂件,它可帮助你查找这种错误7Already had ELSE clause已有ELSE语句.在⼀个条件块⾥使⽤多于⼀个的ELSE语句8Must be in conditional block没有在条件块⾥.通常是有ENDIF或ELSE语句,⽽⽆IF 语句9Symbol not defined符号未定义,在程序中引⽤了未定义的标识符10Syntax error语法错误.不是汇编程序所能识别的⼀个语句11Type illegal in context指定⾮法类型.例如对⼀个过程指定BYTE类型,⽽不是NEAR或FAR12Group name must be unique组名应是唯⼀的.作为组名的符号作为其他符号使⽤13Must be declared during pass 1必须在第⼀遍扫描期间定义.在第⼀遍扫描期间,如⼀个符号在未定义前就引⽤,就会出现这种错误.14Illegal public declaration⼀个标识符被⾮法的指定为PUBLIC类型15Symbol already defferent kind重新定义⼀个符号为不同种类符号.例如⼀个段名重新被当作变量名定义使⽤16Reserved word used as symbol把汇编语⾔规定的保留字作标识符使⽤17Forward reference illegal⾮法的向前引⽤.在第⼀遍扫描期间,引⽤⼀个未定义符号.18Operand must be register操作数位置上应是寄存器,但出现了标识符19Wrong type of register使⽤寄存器出错20Operand must be segment or group应该给出⼀个段名或组名.例如ASSUME语句中应为某段寄存器和指定⼀个段名或组名,⽽不应是别的标号或变量名等21Symbol has no segment不知道标识符的段属性22Operand must be type specifierSymbol alread defined locally以被指定为内部的标识符,企图在EXTRN语句中⼜定义外部标识24Segment paraneters are changed段参数被改变.如同⼀标识符定义在不同段内25Improper align/combin type段定义时的定位类型/组合类型使⽤出错26Reference to multidefined symbol指令引⽤了多重定义的标识符27Operand expected需要⼀个操作数,只有操作符28Operator expected需要⼀个操作符,但只有操作数29Divdsion by 0 or overflow除以0或溢出30Negative shift count运算符SHL或SHR的移位表达式值为负数31Operand type must match操作数类型不匹配.双操作数指令的两个操作数长度不⼀致,⼀个是字节,⼀个是字32Illegal use of external外部符号使⽤出错33Must be record field name应为记录字段名.在记录字段名位置上出现另外的符号34Must be record name or field name应为记录名或记录字段名.在记录名或记录字段名位置上出现另外的符号35Operand must be sizeMust be variable,label,or constant应该是变量名,标号,或常数的位置上出现了其他信息37Must be stucture field name应该为结构字段名.在结构字段名位置上出现了另外的符号38Lefe operand must segment操作数的左边应该是段的信息.如设DA1,DA2均是变量名,下列语句就是错误的:"MOV AX,DA1:DA2".DA1位置上应使⽤某段寄存器名39One operand must constant操作数必须是常数.40Operand must be in same segment or one constant"—"运算符⽤错.例如"MOV AL,—VAR",其中VAR是变量名,应有⼀常数参加运算.⼜如两个不同段的变量名相减出错41Normal type operand expected要求给出⼀个正常的操作数.42Constant expected要求给出⼀个常数.43Operand must have segment运算符SEG⽤错.44Must be associated with data在必须与数据段有关的位置上出现了代码段有关的项45Must be associated with code在必须与代码段有关的位置上出现了数据段有关的项46Multiple base registers同时使⽤了多个基址寄存器.如"MOV AX ,[SI][BP]"47Multiple index registers同时使⽤了多个变址寄存器.如"MOV AX ,[SI][DI]"指令仅要求使⽤基址寄存器或变址寄存器,⽽不能使⽤其他寄存器.49Illegal use of register⾮法使⽤寄存器出错50Value is out of range数值太⼤,超过允许值.例如:"MOV AL ,100H"51Operand not in current CS ASSUME segment操作数不在当前代码段内.通常指转移指令的⽬标地址不在当前CS段内52Improper operand type操作数类型使⽤不当.例如:"MOV VAR1,VAR2".两个操作数均为存储器操作数,不能汇编出⽬标代码53Jump out of range by %ld byte条件转移指令跳转范围超过-128~ 127个字节.出错⼚,信息同时给出超过的字节数54Index displacement must be constant变址寻址的位移量必须是常数55Illegal register value⾮法的寄存器值.⽬标代码中表达寄存器的值超过756Immediate mode illegal不允许使⽤⽴即数寻址.例如"MOV DS,CODE"其中CODE是段名,不能把段名作为⽴即数传送给段寄存器DS 57Illegal size for operand使⽤操作数⼤⼩(字节数)出错.例如:使⽤双字的存储器操作数58Byte register illegal要求⽤字寄存器的指令使⽤了字节寄存器.如PUSH,POP指令的操作数寄存器必须是字寄存器59Illegal uer of CS register指令中错误使⽤了段寄存器CS.如:"MOV CS,AX"CS不能做⽬的操作数60Must be accumulator register要求⽤AX或AL的位置上使⽤可其他寄存器.如IN,OUT指令必须使⽤累加器AX或AL不允许使⽤段寄存器的位置上使⽤了段寄存器.如"SHL DS,1"62Missing or unreachable CS试图跳转去执⾏⼀个CS达不到的标号.通常是指缺少ASSUME语句中CS与代码段相关联63Operand combination illegal双操作数指令中两个操作数组合出错64Near JMP/CALL to different CS试图⽤NEAR属性的转移指令跳转到不在当前段的⼀个地址65Label cannot have segment override段前缀使⽤出错66Must have instuction agter prefix在重复前缀REP,REPE,REPNE后⾯必须有指令67Cannot override ES for destination串操作指令中⽬的操作数不能⽤其他段寄存器替代ES68Cannot address with srgment register指令中寻找⼀个操作数,但ASSUME语句中未指明哪个段寄存器与该操作数所在段有关联69Must be in segment block指令语句没有在段内70Cannot use EVEN or ALIGN with byte alignment在段定义伪指令的定位类型中选⽤BYTE,这时不能使⽤EVEN或ALIGN伪指令71Forward needs override or FAR转移指令的⽬标没有在源程序中说明为FAR属性,可⽤PTR指定72Illegal value for DUP count操作符DUP前的重复次数是⾮法的或未定义73Symbol id already external在模块内试图定义的符号,它已在外部符号伪指令中说明DUP nesting too deep操作数DUP的嵌套太深75Illegak use of undefinde operand( )不定操作符" "使⽤不当.例如"DB 10H DUP( 2)"76Too many valer for struc or record initialization在定义结构变量或记录变量时,初始值太多77Angle brackets requored around initialized list定义结构体变量时,初始值未⽤尖括号()括起来78Directive illegal structure在结构体定义中的伪指令使⽤不当.结构定义中的伪指令语句仅⼆种:分号(;)开始的注释语句和⽤DB,DW等数据定义伪指令语句79Override with DUP illegal在结构变量初始值表中使⽤DUP操作符出错80Field cannot be overridden在定义结构变量语句中试图对⼀个不允许修改的字段设置初值81Override id of wrong type在定义结构变量语句中设置初值时类型出错82Circular chain of EQU aliases⽤等值语句定义的符号名,最后⼜返回指向它⾃⼰.如:A EQU BB EQU A83Cannot emulate cooprocessor opcode 仿真器不能⽀持的8087协处理器操作码84End of file,not END directive 源程序⽂件⽆END⽂件85Data emitted with no segment 语句数据没有在段内86 can't open ml.err把下⾯的复制到⼀个⽂档,命名为ml.err添加到⼯程⽬录FATALcannot open fileI/O error closing fileI/O error reading fileout of memoryassembler limit : macro parameter name table fullinvalid command-line optionnesting level too deepunmatched macro nestingline too longunmatched block nestingdirective must be in control blockerror count exceeds 100; stopping assemblyinvalid numerical command-line argumenttoo many argumentsstatement too complexInternal Assembler Errormissing source filenameCOFF error writing fileinvalid debug and browser data; file exceeds line limitcannot find link.execannot find cvpack.exeSEVEREmemory operand not allowed in contextimmediate operand not allowedcannot have more than one ELSE clause per IF blockextra characters after statementsymbol type conflictsymbol redefinitionundefined symbolnon-benign record redefinitionsyntax errorsyntax error in expressioninvalid type expressiondistance invalid for word size of current segmentPROC, MACRO, or macro repeat directive must precede LOCAL .MODEL must precede this directivecannot define as public or externalsegment attributes cannot changeexpression expectedoperator expectedinvalid use of external symboloperand must be RECORD type or fieldidentifier not a recordrecord constants may not span line breaksinstruction operands must be the same sizeinstruction operand must have sizeinvalid operand size for instructionoperands must be in same segmentconstant expectedoperand must be a memory expressionexpression must be a code addressmultiple base registers not allowedmultiple index registers not allowedmust be index or base registerinvalid use of registerinvalid INVOKE argumentmust be in segment blockDUP too complextoo many initial values for structurestatement not allowed inside structure definitionmissing operand for macro operatorline too longsegment register not allowed in contextstring or text literal too longstatement too complexidentifier too longinvalid character in filemissing angle bracket or brace in literalmissing single or double quotation mark in stringempty (null) stringnondigit in numbersyntax error in floating-point constantreal or BCD number not allowedtext item requiredforced errorforced error : value equal to 0forced error : value not equal to 0forced error : symbol not definedforced error : symbol definedforced error : string blankforced error : string not blankforced error : strings equalforced error : strings not equal[ELSE]IF2/.ERR2 not allowed : single-pass assemblerstructure alignment must be 1, 2, 4, 8, or 16expectedincompatible CPU mode and segment sizeLOCK must be followed by a memory operation instruction prefix not allowedno operands allowed for this instructioninvalid instruction operandsinitializer magnitude too large for specified sizecannot access symbol in given segment or group operands have different framescannot access label through segment registersjump destination too farjump destination must specify a labelinstruction does not allow NEAR indirect addressing instruction does not allow FAR indirect addressing instruction does not allow FAR direct addressingjump distance not possible in current CPU modemissing operand after unary operatorcannot mix 16- and 32-bit registersinvalid scale valueconstant value too largeinstruction or register not accepted in current CPU mode reserved word expectedinstruction form requires 80386/486END directive required at end of filetoo many bits in RECORDpositive value expectedindex value past end of stringcount must be positive or zerocount value too largeoperand must be relocatableconstant or relocatable label expectedsegment, group, or segment register expectedsegment expectedinvalid operand for OFFSETinvalid use of external absolutesegment or group not allowedcannot add two relocatable labelscannot add memory expression and code labelsegment exceeds 64K limitinvalid type for a data declarationHIGH and LOW require immediate operandsN/Acannot have implicit far jump or call to near labeluse of register assumed to ERRORonly white space or comment can follow backslash COMMENT delimiter expectedconflicting parameter definitionPROC and prototype calling conventions conflictinvalid radix tagINVOKE argument type mismatch : argumentinvalid coprocessor registerinstructions and initialized data not allowed in AT segments /AT switch requires the TINY memory modelcannot have segment address references with TINY model language type must be specifiedPROLOGUE must be macro functionEPILOGUE must be macro procedurealternate identifier not allowed with EXTERNDEFtext macro nesting level too deepN/Amissing macro argumentEXITM used inconsistentlymacro function argument list too longN/AVARARG parameter must be last parameterVARARG parameter not allowed with LOCALVARARG parameter requires C calling conventionORG needs a constant or local offsetregister value overwritten by INVOKEstructure too large to pass with INVOKE : argumentnot overriding private proc as publictoo many arguments to INVOKEtoo few arguments to INVOKEinvalid data initializerN/ARET operand too largetoo many operands to instructioncannot have more than one .ELSE clause per .IF block expected data labelcannot nest proceduresEXPORT must be FARinvalid symbol type in expressionbyte register cannot be first operandword register cannot be first operandspecial register cannot be first operandcoprocessor register cannot be first operandcannot change size of expression computationssyntax error in control-flow directivecannot use 16-bit register with a 32-bit addressconstant value out of rangemissing right parenthesistype is wrong size for registerstructure cannot be instancednon-benign structure redefinition: label incorrectnon-benign structure redefinition: too few labels OLDSTRUCTS/NOOLDSTRUCTS state cannot be changed non-benign structure redefinition: incorrect initializersnon-benign structure redefinition: too few initializersnon-benign structure redefinition: label has incorrect offset structure field expectedunexpected literal found in expressionN/Adivide by zero in expressiondirective must appear inside a macrocannot expand macro functiontoo few bits in RECORDmacro function cannot redefine itselfN/Ainvalid qualified typefloating-point initializer on an integer variablenested structure improperly initializedinvalid use of FLATstructure improperly initializedimproper list initializationinitializer must be a string or single iteminitializer must be a single iteminitializer must be a single byteimproper use of list initializerimproper literal initializationextra characters in literal initializationmust use floating-point initializercannot use .EXIT for OS_OS2 with .8086invalid combination with segment alignmentINVOKE requires prototype for procedurecannot include structure in selfsymbol language attribute conflictnon-benign COMM redefinitionCOMM variable exceeds 64Kparameter or local cannot have void typecannot use TINY model with OS_OS2expression size must be 32 bits.EXIT does not work with 32-bit segments.STARTUP does not work with 32-bit segmentsORG directive not allowed in unionsD/Tillegal use of segment registercannot declare scoped code label as PUBLIC.MSFLOAT directive is obsolete : .MSFLOAT ignored ESC instruction is obsolete : ESC ignoredmissing operator in expressionmissing right parenthesis in expressionmissing left parenthesis in expressionreference to forward macro definition16 bit segments not allowed with /coff optionFAR not allowed in flat model comm variablesinvalid .model parameter for flat modelALIAS name is emptyGROUP directive not allowed with /coff option.FPO is not compatible with nested proceduresLEVEL 1cannot modify READONLY segmentN/Anon-unique STRUCT/UNION field used without qualification start address on END directive ignored with .STARTUP cannot ASSUME CSunknown default prologue argumenttoo many arguments in macro calloption untranslated, directive requiredinvalid command-line option value, default is used insufficent memory for /EP : /EP ignoredexpected '>' on text literalmultiple .MODEL directives found : .MODEL ignoredline number information for segment without class 'CODE'directive ignored with /coff switch/Gc switch incompatible with flat model/AT switch incompatible with flat modelinvalid command-line optiondirective ignored without /coff switchdirective ignored outside a procedureLOADDS ignored in flat modeldebug information too complex forwith /coff switch, leading underscore required for start addressLEVEL 2@@: label defined but not referencedexpression expected, assume value 0EXTERNDEF previously assumed to be externallength of symbol previously assumed to be differentsymbol previously assumed to not be in a grouptypes are differentcalling convention not supported in flat modelLEVEL 3N/Ano return from procedureN/Aconditional jump lengthenedprocedure argument or local not referencedexpression may be pass-dependentstructure contains no members87加上.386之后出现乱码应该在.model语句之后加.386使⽤的是 Masm 的话,这⾥有个约定。
汇编语言试题及答案

汇编语言试题及答案一、单项选择题(每题2分,共20分)1. 汇编语言是一种()。
A. 高级语言B. 低级语言C. 机器语言D. 符号语言答案:D2. 汇编语言程序必须经过()才能被计算机执行。
A. 编译B. 汇编C. 链接D. 解释答案:B3. 在汇编语言中,指令通常由()组成。
A. 操作码和操作数B. 操作码和地址码C. 操作码和数据D. 地址码和数据答案:A4. 汇编语言中的寄存器主要用于()。
A. 存储数据B. 存储指令C. 存储地址D. 存储控制信息答案:A5. 汇编语言中的立即寻址方式是指()。
A. 操作数在寄存器中B. 操作数在内存中C. 操作数在指令中D. 操作数在输入/输出端口中答案:C6. 在汇编语言中,指令“MOV AX, 1234H”的作用是()。
A. 将内存地址1234H的内容移动到AX寄存器B. 将立即数1234H移动到AX寄存器C. 将AX寄存器的内容移动到内存地址1234HD. 将AX寄存器的内容移动到另一个寄存器答案:B7. 汇编语言中的循环结构通常使用()指令实现。
A. JZB. JNZC. LOOPD. CALL答案:C8. 在汇编语言中,子程序调用通常使用()指令。
A. JZB. JNZC. CALLD. RET答案:C9. 汇编语言中的堆栈操作通常使用()指令。
A. PUSHB. POPC. MOVD. ADD答案:A10. 在汇编语言中,中断服务程序的结束通常使用()指令。
A. INTB. IRETC. RETD. CALL答案:B二、填空题(每题2分,共20分)1. 汇编语言中的指令通常由______和______两部分组成。
答案:操作码;操作数2. 汇编语言中的寄存器可以分为______、______和______三类。
答案:通用寄存器;段寄存器;控制寄存器3. 汇编语言中的寻址方式包括______、______、______和______等。
答案:立即寻址;直接寻址;间接寻址;寄存器寻址4. 在汇编语言中,指令“MOV AX, BX”的作用是将BX寄存器的内容______到AX寄存器。
汇编语言试题及参考答案

汇编语言试题及参考答案一、选择题(每题2分,共20分)1. 汇编语言中的指令通常由哪两部分组成?A. 操作码和操作数B. 地址和数据C. 指令和数据D. 操作码和地址答案:A2. 以下哪个不是汇编语言中的寻址方式?A. 直接寻址B. 间接寻址C. 立即寻址D. 寄存器寻址答案:B3. 在汇编语言中,以下哪个指令用于将数据从内存加载到寄存器中?A. MOVB. CMPC. ADDD. SUB答案:A4. 汇编语言中,以下哪个指令用于比较两个寄存器的内容?A. MOVB. CMPC. ADDD. SUB答案:B5. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与立即数相加?A. MOVB. CMPC. ADDD. SUB答案:C6. 汇编语言中的条件跳转指令通常使用哪些条件?A. 零、非零B. 正、负C. 溢出、非溢出D. 所有上述条件答案:D7. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与另一个寄存器的内容相减?A. MOVB. CMPC. ADDD. SUB答案:D8. 汇编语言中的循环结构通常使用哪种类型的跳转指令?A. 无条件跳转B. 条件跳转C. 直接跳转D. 间接跳转答案:B9. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与内存中的内容相加?A. MOVB. CMPC. ADDD. SUB答案:C10. 汇编语言中,以下哪个指令用于将一个寄存器的内容与另一个寄存器的内容进行逻辑与操作?A. ANDB. ORC. NOTD. XOR答案:A二、填空题(每题2分,共20分)1. 在汇编语言中,指令MOV AX, BX的作用是将寄存器________的内容复制到寄存器________中。
答案:BX,AX2. 汇编语言中的指令JMP FAR PTR 100H:200H的作用是跳转到内存地址________。
答案:100H:200H3. 汇编语言中,指令CALL的作用是________。
汇编语言程序设计题目以及答案

汇编语言程序设计题目以及答案[P1] 汇编语言程序设计题目以及答案汇编语言是一种底层计算机语言,它直接使用机器指令来编写程序。
本文将介绍一些汇编语言程序设计的题目,并提供相应的答案。
通过这些题目和答案的学习,读者可以更好地理解和掌握汇编语言程序设计的基本概念和技巧。
[题目一] 计算两个数的和要求:编写汇编程序,计算两个给定的整数的和,并将结果存储在指定的内存位置中。
答案:```assemblysection .datanum1 dd 10 ; 第一个整数num2 dd 20 ; 第二个整数result dd 0 ; 结果section .textglobal _start_start:mov eax, [num1] ; 将num1值存入寄存器eaxadd eax, [num2] ; 将num2值与eax寄存器中的值相加mov [result], eax ; 将结果存储到result变量mov eax, 1 ; 准备执行系统调用mov ebx, 1 ; 文件描述符:标准输出mov ecx, result ; 输出的数据mov edx, 4 ; 数据长度int 0x80 ; 执行系统调用mov eax, 1 ; 准备执行系统调用xor ebx, ebx ; 正常退出int 0x80 ; 执行系统调用```[题目二] 字符串反转要求:编写汇编程序,将一个给定的字符串反转,并将结果存储在指定的内存位置中。
答案:```assemblysection .datastr db 'Hello', 0 ; 待反转的字符串section .bssreverse resb 6 ; 存储反转后的字符串section .textglobal _start_start:mov esi, str ; esi指向待反转的字符串mov edi, reverse ; edi指向存储反转结果的位置 mov ecx, 5 ; 字符串长度为5mov ebx, 1 ; ebx用于计数reverse_loop:mov al, [esi+ebx]mov [edi-ebx+5], alinc ebxloop reverse_loopmov byte [edi+5], 0 ; 在末尾添加字符串结束符 mov eax, 4 ; 准备执行系统调用mov ebx, 1 ; 文件描述符:标准输出mov ecx, reverse ; 输出的数据mov edx, 6 ; 数据长度int 0x80 ; 执行系统调用mov eax, 1 ; 准备执行系统调用xor ebx, ebx ; 正常退出int 0x80 ; 执行系统调用```[题目三] 求平均数要求:编写汇编程序,计算给定的一组整数的平均数,并将结果存储在指定的内存位置中。
汇编语言习题及解答

第1章基础知识检测点(第9页)(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13位。
(2)1KB的存储器有1024个存储单元,存储单元的编号从0到1023。
(3)1KB的存储器可以存储8192(2^13)个bit,1024个Byte。
(4)1GB是24(2^30)个Byte、1MB是1048576(2^20)个Byte、1KB是1024(2^10)个Byte。
(5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们一次可以传送的数据为: 1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
解题过程:(1)1KB=1024B,8KB=1024B*8=2^N,N=13。
(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。
(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。
(4)1GB=24B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。
(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。
这样的CPU最多可以寻找2的N次方个内存单元。
(一个内存单元=1Byte)。
(6)8根数据总线一次可以传送8位二进制数据(即一个字节)。
(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。
(8)在存储器中指令和数据没有任何区别,都是二进制信息。
第2章寄存器检测点(第19页)(1)写出每条汇编指令执行后相关寄存器中的值。
汇编语言程序常见错误分析

根据上表所反映的情况,笔者作了如下数据统计及分析:1、能正常登录的网站注249个,占调查总体样本容量的68.06%,不能登录的占31.94%,说明甘肃旅游网站的硬件建设依然存在较多问题,或者网站的所有方申请了域名后由于某种原因而放弃了其使用权。
2、在能统计出网站设计建设方的29个网站中,企业/组织自主开发的网站4个,占13.79%;委托其他企业/组织开发的网站25个,占86.21%。
说明甘肃旅游企业或组织缺乏技术,自主开发能力低。
3、能正常登录且能统计主页栏目数网站(45个)的主页栏目数平均值为9.71,这在一定程度上反映出甘肃旅游网站内容较为单一,这可能也是影响浏览量的一个因素。
4、有外文(含中文繁体)版注3网页的网站14个,占能正常登录的网站总数的28.57%,没有建设外文网业的比重较大(71.43%)。
说明甘肃旅游企业/组织的对外意识淡薄。
由于语言障碍,致使甘肃数量众多的优质旅游资源不能直接通过网络来吸引更多的国外游客,这也在一定程度上影响了国际客源地市场的来甘旅游量。
5、有在线预定(包括酒店、机/车票、线路预定等)功能的网站29个,占能正常登录网站总数的59.18%。
说明甘肃旅游企业/组织已经具备了在线交易的意识。
有在线支付功能的网站4个,占有在线预定功能网站总数的13.79%。
说明甘肃旅游网站实际能进行在线交易的很少,绝大部分只是简单的介绍旅游知识和旅游线路等,以信息公布为主要内容,对实现供需双方网上信息即时交换和网上交易等功能不全,不能真正发挥出电子商务网站的作用。
甘肃旅游电子商务仍处于较低发展层次。
6、值得一提的是,兰州雁滩宾馆的网站(yantanhotel.com),只有英文版,而没有中文版,链接的全是外国酒店,且与本酒店经营业务毫无联系。
白银区旅游网(byqtour.com)、崇信旅游网(chongxintour.com)的页面全是英文而无中文,且与旅游毫无联系。
打开甘肃旅游(xoxo113.8u8.com)网站,看到的却是推荐网民注册免费邮箱的信息。
2010汇编B

D. 中断服务程序入口地址
3.8086 的汇编语言指令系统中的条件转移指令可以使程序转移到( ) A. 段内的任何地方 B. 距该指令偏移地址为-32768~+32767 的地方 C. 距该指令偏移地址为-128~+127 的地方. D. 段外 4.能定义 ASCII 码字符串的数据定义语句有( ) A. DB,DW,DD,DQ,DT B. DB,DW,DD C. DB, DW
D.DB;
17.与 NOT AX;NEG AX 指令等效的指令是 ( A.DEC AX B.INC AX C.SUB AX,AX 18. 有如下伪指令: BUF1 DB 3 DUP(0,2 DUP (1,2) ,3) COUNT EQU $ -BUF1 则符号 COUNT 等价的值是( ) 。 A.6 B.18 C.16 D.8 19. DA1 DW 2A05H DA2 DB 0FAH ┇ MOV AL,BYTE PTR DA1 SUB DA2,AL 上述指令执行后,DA2 中的内容是( ) 。 A.0DAH B.0FAH C.0F5H
第 6 页
共 6 页
__;如果要求把 AL 的第 0,1 位变
、_
和_
。
判断下列指令是否有错,如果有错,请说明错误原因。 三、判断改错题(判断下列指令是否有错,如果有错,请说明错误原因。10 分) 1、MUL 20H 2、RCR AX , 3 3、CMP [2000H] , LAB 4、LDS DWORD PTR 5、CALL AL 6、MOV AL,300 7、MOV AX ,DI+BX 8、MOV [SP] , BX 9、IN AX , 1234H 10、MOV CS, CX
第 4 页
共 6 页
五、程序填空题(15 分) 程序填空题(
汇编语言试题及参考答案

汇编语言试题及参考答案汇编语言试题及参答案一、填空题1. ZF标志位是标志结果是否为零的,若结果,ZF为(),否则ZF为()。
当ZF 为1 时,SF 为()2. 标号可以有两种类型属性。
它们是()和()3.8 位无符号整数的表示范围为0--255 ,写成16 进制形式为(),8 位有符号整数的表示范围为-128--+127, 写成16 进制形式为()4. 伪指令DB,GROUP 和NAME 三个标号名字域必须有名字的是(),不得有名字的是(),可有可无名字的是()。
5. 循环程序通常由()()()和循环结果外理四部分构成6. 在数值不达式中,各种运算符可可混合使用,其优先次序规则*,/()于+,-;XOR ,OR()于AND,LT ()于GT7. 宏指令定义必须由伪指令()开始,伪指令()结束,两者之间的语句称为()8. 调用程序与子程序之间的参数传递方法有四种,即堆栈法()()()9. 分别用一条语句实现下述指明的功能( 1 )栈顶内容弹出送字变量AYW ()(2)双字变量AYD 存放的地址指针送ES 和SI()(3)变量AY2 类型属性送AH ()( 4 )不允许中断即关中断()(5)将字符串‘ HOW ARE YOU 存入变量AYB ()( 6 )子程序返回调用程序()(7)地址表达式AYY[4]的偏移地址送字变量ADDR()(8)AX 的内容加 1 ,要求不影响CF()(9)BX 的内容加1,要求影响所有标志位()(10)若操作结果为零转向短号GOON ()二、单选题1.IBM PC 微机中,有符号数是用()表示的1 .原码2.补码3.反码4.BCD 码2. 把汇编源程序变成代码程序的过程是()1 .编译2.汇编3.编辑4.链接三、己知:VAR1 ,VAR2 的类型属性分别为字和字节,标号LPFAR 的类型属性为FAR。
指出下列非法语句的错误原因1. POP CS ()2.INC [BX] ()3. MVL 8()4. JLE LPFAR()5. MOV DB,1800()6. MOV[DI],VAR17.SUB AX,VAR2()8.CMP SS AX()四、简答题1. 试述子程序的一般结构组成2. 标号有哪三个属性?其含义是什么?3. 试述CMP AX ,BX 和SUB AX ,BX 两条语句的异同点?五、阅读如下程序段,回答所提出的问题,假定X1,X2,...XN 为无符号数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 对大多数指令而言,目标(目的)操作数不能使用立即 寻址方式;
2. EA只对存储器操作数;立即寻址和寄存器寻址无物理地 址; 3. 对存储器操作数,能用于存放地址的寄存器是:
BX
BP
SI
DI;其它寄存器不能使用。
4. 对大多数指令而言,目标(目的)操作数和源操作数不 能同时使用存储器操作数; 5. 计算物理地址时,BP默认与SS搭配;BX、SI、DI默认与 DS搭配。
答案:AX=320EH
课堂练习
已知OPER1和OPER2为16位带符号数,分析下面程序段功能。 MOV AX,OPER1 MOV BX,OPER2 MOV CX,0 CMP AX,0 JNL L1 NEG AX L1: ADD CX,AX CMP BX,0 JNL L NEG BX L: ADD CX,BX CX←|OPER1|+|OPER2| 程序段完成的功能是: 。
AGAIN:MOV AX,[SI] CMP AX,0
JLE
NEXT
ADD SUM,AX INC NEXT: COUNT
ADD SI,2 LOOP AGAIN MOV AX,4C00H INT 21H
END START
2. 参考程序:
CODE SEGMENT ASSUME CS:CODE START:MOV BL,1 MOV CX,0 AGAIN:MOV AL,BL MUL BL ; ;CX清零,用于统计级数的和 ; ;求平方,指令也可使用IMUL
串操作程序
【例】: 在数据段DATAREA中有一个字符串,其长度为17,要求把它们
转送到附加段EXTRA中的一个缓冲区。 程序如下: ;先完成数据段和附加段定义,其中源串放在数据段,目的串放在附加 段。
DATAREA SEGMENT
MESS1 DATAREA ENDS EXTRA SEGMENT MESS2 EXTRA ENDS DB
ADD CX,AX
CMP CX,1000 JG DISPLAY
;平方和
;比较CX是否大于1000 ;是,则转入显示处理
INC
JMP
BL
SHORT AGAIN
;不是,BL加1
;重复执行
DISPLAY:MOV DL,BL CMP DL,9 JG ADD37 ADD DL,30H JMP NEXT ADD37: ADD DL,37H NEXT: MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START
;定义数据段
DB ‘PERSONAL COMPUTER $’ ;定义附加段 17 DUP(?)
;在存储器中分配17个字节单元的空间
CODE SEGMENT ASSUME CS:CODE, DS:DATAREA, ES:EXTRA START: MOV AX,DATAREA MOV DS,AX ;数据段地址送DS MOV AX,EXTRA MOV ES,AX ;附加段地址送ES LEA SI,MESS1 ;MESS1 SI LEA 首地址送 SI,MESS1+16 ; LEA 首地址送 DI,MESS2+16 ; LEA DI,MESS2 ;MESS2 DI MOV CX,17 ; MOV CX,17 ;字符串大小 STD CLD ;地址自动增量方式 REP MOVSB ;重复实现串复制 MOV AX, 4C00H 思考:如果从末地址开始传送,程序该如何实现? INT 21H CODE ENDS END START
答: AX=28DFH。
分析: 第四条指令执行完,(AX)=16AAH,CF=1。 第五条指令注意要加上CF的值。
● DUP操作可以嵌套 例: DUP嵌套使用 ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3) 占用的存储单元数为: 100×(1+2×(1+1)+1+1)=700B 试给出下列变量所占用的存储空间(字节数)
常见的非法指令错误
1. MOV
2. MOV 3. ADD 4. SUB 6. DIV
CS, AX
ES, 2000H AX, DL 2000H, BX 600H
5. IMUL 400H 7. XCHG AX, 2000H
8. SHL
9. ADD
CL, AX
AX, [DX]
10.MOV AX, ARRAY[BX][BP]
简单程序设计练习
1. 已知字数组ARRAY,有N个元素,试编写程序,把数组中 的正数累加,结果放在SUM中(不考虑溢出),并统计正数 个数,保存到COUNT。 2. 试编写程序,求级数12+22+32+ 的前n项和刚大于1000 的项数n。并在屏幕上显示结果(用十六进制)。 (注:n是一个满足十六进制的个位数)
11.MOV [BX], ARRAY[SI]
乘法除法指令使用 【例】 分析指令执行后,AX的值
MOV MOV IMUL MOV MOV AX, 0FFFAH BL, AH BL AX, 0A9H BL, 0E8H AX=6
DIV
BL
AX=0A900H
例:分析下列程序段执行后,AX的值: (AX)=0,CF=0 XOR AX,AX (AX)=0A2D5H,CF=0 MOV AX,0A2D5H (AX)=0A2D5H,CF=0 MOV CL,3 (AX)=16AAH, CF=1 RCL AX,CL ADC AX,1234H (AX)=28DFH, CF=0
; ; 比较是否大于9 ;是则转ADD37执行 ;不是,则加30H,把数符变成ASCII码
ARRAY DB ‘ABC’,200 DUP (20,10 DUP(‘EF’,5,6),10) TEST DW 1,2,10 DUP(20 DUP (9, 5 DUP ARRAY 8403 , TEST 6424
例:试分析下列程序段执行完后,AX的值。 … … ORG 3200H ARRAY DB ‘abc’ EVEN LIST DW 1,2,3,$+4,5 …… MOV CX,3 LEA BX,LIST ; (BX)=3204H SHL CX,1 ; (CX)=6 ADD BX,CX ; (BX)=320AH MOV AX,[BX] ;