汇编语言编写计算器DW 10,20,20H,40H怎么计算的?

汇编语言试题库
学年第二学期期末考试复习题及参考答案 一、 填空 1. 十进制数 369 转换成二进制数为()2,转换成十六进制数为()16. 2. 计算机中的指令由(操作码 )和( 地址码 )两部分组成。 3. 8086 的地址总线有 20 根,寻址范围为( 1M )字节。 4. 下一条将要执行的指令的地址存放在寄存器( )中。 5. 写出 IBM PC 机的三种子程序返回的指令(RET), (IRET),(IRETD) 。 6. 汇编语言源程序需经过(汇编)程序汇编, obj)程序连接才能生成可执行文件。 ( 7. 存储器某单元的地址表示为 2314H:4132H,则它的偏移地址=(4132) ,物理地址= (h=6446h) 8. REP 指令前缀与()指令配合使用。 9. 在显示器上查看和修改内存单元的内容可以使用 DEBUG 的( )和( )命令。 10. (AL)=BFH,要求屏蔽第 0,1 两位,则要执行指令 ) ( ;如果要求第 0,1 位变反,可使用指 令( ) 11. 宏汇编适合于()()的子功能段使用; , 二、 选择题 1. 设字长 N=16,有符号数 7AE9H 的补码表示为( ) A. 9EA7H B. 76C4H C. 8417H D. 7AE9H 2. 比较有符号数 3260H 与 0B425H 的大小关系为( ) A. 相等 B. 小于 C. 大于 D. 不能比较 3. 指令 JMP WORD PTR [BX][DI]中转移的目标地址为( ) A.16 d x(DS)+(BX)+(DI) B.16d x(ES)+(BX)+(DI) C.16d x(SS)+(BX)+(DI) D.16d x(CS)+(BX)+(DI) 4. 在指令 MOV AX,[1000H]中,源操作数的寻址方式为( ) A.立即寻址 B.直接寻址 C.段内间接寻址 D.寄存器寻址 5. 中断矢量表中存放的是( ) A. 中断类型号 B. 断点地址 C. 中断服务程序 D. 中断服务程序入口地址 6. 8086 的汇编语言指令系统中的条件转移指令可以使程序转移到( ) A. 段内的任何地方 B. 距该指令偏移地址为-32768~+32767 的地方 C. 距该指令偏移地址为-128~+127 的地方. D. 段外 7. 能定义 ASCII 码字符串的数据定义语句有( ) A. DB,DW,DD,DQ,DT B. DB,DW,DD C. DB, DW D. DB; 8. 若(AL)=87H,执行 ADD AL,0F5H 后,S,Z,C,O,P 的状态为( ) A.SF=0,ZF=0,CF=1,OF=1,PF=0 B.SF=1,ZF=0,CF=1,OF=0,PF=1 C.SF=0,ZF=0,CF=0,OF=1,PF=0 D.SF=1,ZF=0,CF=1,OF=1,PF=1 9. 比较指令 CMP( ) A. 专用于有符号数比较 B. 专用于无符号数比较 C. 专用于串比较 D. 不区分比较的对象是有符号数还是无符 号数 10. 数据传送指令对标志位的影响为( ) A.都不影响; B.都影响; C.除了 SAHF,POPF,其它均不影响. D.除了控制标志位,其它均不影响 三、 判断题 ( )31. 段间调用的子程序必须由伪操作 FAR 说明为远过程。 ( )32. PC 机以位作最小寻址单位。 ( )33. 当 SRC 是立即数时,DST 可以使用存储器寻址。 ( )34. 指定各个逻辑段偏移地址可以使用 ORG 伪指令。 ( )35. LOOPE/LOOPZ 是相等/为零时转移到标号,其退出条件是(CX)=0 或 ZF=0。 ( )36. POP IP ( )37. 设 327FH 和 0BFFFH 为有符号数的补码表示,则 327FH & 0BFFFH ( )38. 多个模块间的符号交叉引用要用伪指令 PUBLIC 和 EXTRN 说明 ( )39. MOV AX,VAR1-VAR2+100 ( )40. ADD [SI],50 四、 程序分析题 1. A DW 1234H B DW 5678H PUSH A PUSH B POP A POP B 试回答:上述程序段执行后(A)= , (B)= 2. 分析下面程序段, MOV AL,200 SAR AL,1 MOV BL,AL MOV CL,2 SAR AL,CL ADD AL,BL 试问程序段执行后(BL)= (AL)= 3. STRING DB ‘ABCDEFGHIJ' MOV AH,01 ;从键盘输入字符 1~9 INT 21H AND AL,0FH DEC AL XOR AH,AH MOV BX,OFFSET STRING ADD BX,AX MOV BL,[BX] MOV AH,02H ;显示输出 INT 21H 试回答: (1)上述程序段的功能是什么? (2)如从键盘输入字符‘4',程序段有什么结果? 4. 有如下程序: AND AL,AL JZ BRCH1 RCR AL,1 JZ BRCH2 RCL AL,1 INC AL JZ BRCH3 上述程序运行后,试回答: (1)当(AL)=时,程序转向 BRCH1 (2)当(AL)=时,程序转向 BRCH2 (3)当(AL)=时,程序转向 BRCH3 5. 下列程序段完成什么工作? DAT1 DB 30 DUP(?) DAT2 DB 10 DUP(?) ┇ MOV CX,10 MOV BX,20 MOV SI,0 MOV DI,0 NEXT:MOV AL,DAT1[BX] [SI] MOV DAT2[DI] ,AL INC SI INC DI LOOP NEXT 6. 下面程序段执行完以后,AL 的内容是什么? MOV BX,00FFH AND BX,0FFFH OR BX,0F0FH XOR BX,00FFH 7. 执行下列指令后,AX 寄存器中的内容是什么? START DW 10H,20H,30H,40H,50H EE1 DW 3 ┇ MOV BX,OFFSET START ADD BX,EE1 MOV AX, [BX] 8. 试分析下面程序段的功能是什么? CMP AL,‘A’ JC OTHER CMP AL,‘Z’+1 JNC OTHER JMP LETTER ┇ OTHER: ┇ LETTER: ┇ 五、 程序填空题 1. 设 AX,BX 中的数一个为正数,一个为负数,下面程序段完成将正数送到 PLW 单元 中存放,请将程序中所缺指令语句补上。 TEST AX,8000H MOV PLW,BX JMP DONE K1: DONE: 2. 现有下列数据段: DATA SEGMENT STR1 DB‘ABCDEFGHIJKL' COUNT EQU -STR1 BUF DB COUNT DUP(0) DATA ENDS 下面程序段是实现把 STR1 中所有字符逆向传送到 BUF 缓冲区(即 STR1 中第一个字符送 到 BUF 的最后一个单元, STR1 中最后一字符送到 BUF 的第一个单元) 试把程序中所空缺 。 的指令填上。 MOV SI,OFFSET BUF-1 MOV DI,OFFSET BUF MOV CX,COUNT __ __ LOOP:MOVSB __ __ LOOP LOP或者() 六、 程序设计题 1. 编程序段计算 SUM=∑ai=a1+a2+...+a20, 已知 a1......a20 依次存放在以 BUF 为首址 i=1 的数据区,每个数据占两个字节,和数 SUM 也为两个字节。 (要求用循环结构编写,循环 控制采用计数控制)(此题勿需书写源程序格式,只需把试题要求的有关指令序列书写出 。 来。 ) 2. 设在 DAT 单元存放一个-9~+9 的字节数据,在 SQRTAB 数据区中存放了 0~9 的平 方值,请用直接查表法编写一个子程序,在 SQRTAB 中查找出 DAT 单元中数据对应的平方 值送 SQR 单元。并写出主程序的调用方式。 数据段如下: DATA SEGMENT DAT DB XXH SQRTAB DB 0,1,4,9,...81 SQR DB? DATA ENDS 3. 试编写出把 DX、AX 中的双字右移四位的程序段。 4. 定义一个数据区,它包含有 23H,24H,25H 和 26H 四个字符数据,把这个数据区复 制 20 次,并显示出复制结果。汇编语言
学年第二学期期末考试复习题及参考答案 一、 填空 1. 十进制数 369 转换成二进制数为()2,转换成十六进制数为(171)16. 2. 计算机中的指令由( 操作码 )和( 地址码 )两部分组成。 3. 8086 的地址总线有 20 根,寻址范围为( 1M )字节。 4. 下一条将要执行的指令的地址存放在寄存器( 指令指针寄存器 )中。 5. 写出 IBM PC 机的三种子程序返回的指令(RET), (IRET),(IRETD) 。 6. 汇编语言源程序需经过(汇编)程序汇编, 连接 )程序连接才能生成可执行文件。 ( 7. 存储器某单元的地址表示为 2314H:4132H,则它的偏移地址=(4132) ,物理地址= (27272H) 8. REP 指令前缀与(字符 串)指令配合使用。 9. 在显示器上查看和修改内存单元的内容可以使用 DEBUG 的( D )和( E )命令。 10. (AL)=BFH,要求屏蔽第 0,1 两位,则要执行指令( AND AL,3F );如果要求第 0,1 位 变反,可使用指令( XOR AL,3F ) 11. 宏汇编适合于(程序短)(参数多)的子功能段使用; , 二、 选择题 1. 设字长 N=16,有符号数 7AE9H 的补码表示为( D ) A. 9EA7H B. 76C4H C. 8417H D. 7AE9H 2. 比较有符号数 3260H 与 0B425H 的大小关系为( C ) A. 相等 B. 小于 C. 大于 D. 不能比较 3. 指令 JMP WORD PTR [BX][DI]中转移的目标地址为( A ) A.16 d x(DS)+(BX)+(DI) B.16d x(ES)+(BX)+(DI) C.16d x(SS)+(BX)+(DI) D.16d x(CS)+(BX)+(DI) 4. 在指令 MOV AX,[1000H]中,源操作数的寻址方式为( B ) A.立即寻址 B.直接寻址 C.段内间接寻址 D.寄存器寻址 5. 中断矢量表中存放的是( D ) A. 中断类型号 B. 断点地址 C. 中断服务程序 D. 中断服务程序入口地址 6. 8086 的汇编语言指令系统中的条件转移指令可以使程序转移到( A ) A. 段内的任何地方 B. 距该指令偏移地址为-32768~+32767 的地方 C. 距该指令偏移地址为-128~+127 的地方. D. 段外 7. 能定义 ASCII 码字符串的数据定义语句有( D ) A. DB,DW,DD,DQ,DT B. DB,DW,DD C. DB, DW D. DB; 8. 若(AL)=87H,执行 ADD AL,0F5H 后,S,Z,C,O,P 的状态为( C ) A.SF=0,ZF=0,CF=1,OF=1,PF=0 B.SF=1,ZF=0,CF=1,OF=0,PF=1 C.SF=0,ZF=0,CF=0,OF=1,PF=0 D.SF=1,ZF=0,CF=1,OF=1,PF=1 9. 比较指令 CMP( D ) A. 专用于有符号数比较 B. 专用于无符号数比较 C. 专用于串比较 D. 不区分比较的对象是有符号数还是无符 号数 10. 数据传送指令对标志位的影响为( D ) A.都不影响; B.都影响; C.除了 SAHF,POPF,其它均不影响. D.除了控制标志位,其它均不影响 三、 判断题 ( )31. 段间调用的子程序必须由伪操作 FAR 说明为远过程。 T ( )32. PC 机以位作最小寻址单位。 F ( )33. 当 SRC 是立即数时,DST 可以使用存储器寻址。 F ( )34. 指定各个逻辑段偏移地址可以使用 ORG 伪指令。 T ( )35. LOOPE/LOOPZ 是相等/为零时转移到标号,其退出条件是(CX)=0 或 ZF=0。 T ( )36. POP IP F ( )37. 设 327FH 和 0BFFFH 为有符号数的补码表示,则 327FH & 0BFFFH F ( )38. 多 个 模 块 间 的 符 号 交 叉 引 用 要 用 伪 指 令 PUBLIC 和 EXTRN 说 明 T ( )39. MOV AX,VAR1-VAR2+100 F ( )40. ADD [SI],50 F 四、 程序分析题 1. A DW 1234H B DW 5678H PUSH A PUSH B POP A POP B 试回答:上述程序段执行后(A)= 5678H , (B)= 1234H 2. 分析下面程序段, MOV AL,200 SAR AL,1 MOV BL,AL MOV CL,2 SAR AL,CL ADD AL,BL 试问程序段执行后(BL)= 0E4H (AL)= 0DDH 3. STRING DB ‘ABCDEFGHIJ' MOV AH,01 ;从键盘输入字符 1~9 INT 21H AND AL,0FH DEC AL XOR AH,AH MOV BX,OFFSET STRING ADD BX,AX MOV BL,[BX] MOV AH,02H ;显示输出 INT 21H 试回答: (1)上述程序段的功能是什么? 根据从键盘输入的字符‘1’~‘9’,确定在显示器上显示 STRING 中第几个字符。 (2)如从键盘输入字符‘4',程序段有什么结果? 显示器显示字符‘D’ 4. 有如下程序: AND AL,AL JZ BRCH1 RCR AL,1 JZ BRCH2 RCL AL,1 INC AL JZ BRCH3 上述程序运行后,试回答: (1)当(AL)=(AL)=0 时,程序转向 BRCH1 (2)当(AL)=(AL)=1 时,程序转向 BRCH2 (3)当(AL)=(AL)=-1 时,程序转向 BRCH3 5. 下列程序段完成什么工作? 把 DAT1+20 存储单元开始的 10 个字节搬到 DAT2 开始的 连续 10 个存储单元中 DAT1 DB 30 DUP(?) DAT2 DB 10 DUP(?) ┇ MOV CX,10 MOV BX,20 MOV SI,0 MOV DI,0 NEXT:MOV AL,DAT1[BX] [SI] MOV DAT2[DI] ,AL INC SI INC DI LOOP NEXT 6. 下面程序段执行完以后,AL 的内容是什么? 0F00H MOV BX,00FFH AND BX,0FFFH OR BX,0F0FH XOR BX,00FFH 7. 执行下列指令后,AX 寄存器中的内容是什么? 3000H START DW 10H,20H,30H,40H,50H EE1 DW 3 ┇ MOV BX,OFFSET START ADD BX,EE1 MOV AX, [BX] 8. 试分析下面程序段的功能是什么? 判断 AL 的内容,若为‘A’~‘Z’的大写字母时, 程序转 LETTER 处理,否则转 OTHER 处理 CMP AL,‘A’ JC OTHER CMP AL,‘Z’+1 JNC OTHER JMP LETTER ┇ OTHER: ┇ LETTER: ┇五、 程序填空题 1. 设 AX,BX 中的数一个为正数,一个为负数,下面程序段完成将正数送到 PLW 单元 中存放,请将程序中所缺指令语句补上。 TEST AX,8000H JE K1 或 JZ K1 MOV PLW,BX JMP DONE K1: MOV PLW,AX DONE: 2. 现有下列数据段: DATA SEGMENT STR1 DB‘ABCDEFGHIJKL' COUNT EQU -STR1 BUF DB COUNT DUP(0) DATA ENDS 下面程序段是实现把 STR1 中所有字符逆向传送到 BUF 缓冲区(即 STR1 中第一个字符送 到 BUF 的最后一个单元, STR1 中最后一字符送到 BUF 的第一个单元) 试把程序中所空缺 。 的指令填上。 MOV SI,OFFSET BUF-1 MOV DI,OFFSET BUF MOV CX,COUNT __ CLD__ LOOP:MOVSB __ SUB SI,2__ LOOP LOP 或者(STD/ADD DI,2) 六、 程序设计题 1. 编程序段计算 SUM=∑ai=a1+a2+...+a20, 已知 a1......a20 依次存放在以 BUF 为首址 i=1 的数据区,每个数据占两个字节,和数 SUM 也为两个字节。 (要求用循环结构编写,循环 控制采用计数控制)(此题勿需书写源程序格式,只需把试题要求的有关指令序列书写出 。 来。 ) 程序段:MOV AX,0 MOV BX,OFFSET BUF MOV CX,20 LOP:ADD AX,[BX] INC BX INC BX LOOP LOP MOV SUM,AX 2. 设在 DAT 单元存放一个-9~+9 的字节数据,在 SQRTAB 数据区中存放了 0~9 的平 方值,请用直接查表法编写一个子程序,在 SQRTAB 中查找出 DAT 单元中数据对应的平方 值送 SQR 单元。并写出主程序的调用方式。 数据段如下: DATA SEGMENT DAT DB XXH SQRTAB DB 0,1,4,9,...81 SQR DB? DATA ENDSSTACL1 SEGMENT PARA STACK DW 20H DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX ┇ CALL SUBROT ┇ MOV AH,4CH INT 21H SUBROT PROC PUSH AX PUSH BX LEA BX,SQRTAB MOV AL,DAT TEST AL,80H JNS NEXT NEG AL NEXT: XLAT SQRTAB MOV SQR,AL POP BX POP AX RET SUBROT ENDP CODE ENDS END SRART 3. 试编写出把 DX、AX 中的双字右移四位的程序段。 MOV CL,04 SHR AX,CL MOV BL,DL SHR DX,CL SHL BL,CL OR BL,AH 4. 定义一个数据区,它包含有 23H,24H,25H 和 26H 四个字符数据,把这个数据区复 制 20 次,并显示出复制结果。 DATA SEGMENT PATTERN DB 23H,24H,25H,26H DISPLAY DB 80 DUP(‘ ’),‘$’ DATE ENDS CODE SEGMENT ┇ CLD LEA SI,PATTERN LEA DI,DISPLAY MOV CX,80 REP MOVSB MOV AH,09H LEA DX,DISPLAY INT 21H RET CODE ENDS 一.名词解释(本大题共 5 小题,每小题 3 分,共 15 分)试解释下列名词的含 义。 1.逻辑地址 2.物理地址 3.标志寄存器 4.存储器寻址方式 5.补码 二.计算题(本大题共 5 小题,每小题 4 分,共 20 分)试按照各小题的要求给 出计算结果。 1.将十进制数 100 分别转换为二进制、十六进制数,它们的表示形式分别为多 少? 2.假设(DS)=0B00H, (BX)=0210H,对于指令 MOV DS:120H[BX],AL, 其目的操作数的物理地址为多少? 3.假设(BX)=0210H,(DI)=0060H,对于指令 ADD DL,[BX][DI],其源 操作数的偏移量为多少? 4.假设当前(SP)=0060H,连续执行 5 条 PUSH 指令后,(SP)=? 5.对于一个十进制数 C 65,其二进制补码表示形式为多少? 三. 排错题(本大题共 4 小题,每小题 5 分,共 20 分)每小题列出了一条指令, 判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正 确给 2 分,分析正确给 3 分,判断错误不给分。 1.PUSH 5588H 2.MOV DS, 1720H 3.ADD AX, CL 4.AND AX,[DX] 四.程序分析题(本大题共 6 小题,每小题 5 分,共 30 分)每小题列出了一段 小的程序片段和相关存储单元的初始值, 请按题目的要求分析各程序片段的运行 结果。(寄存器中的内容请使用十六进制形式给出) 1.阅读如下程序片段 MOV AL,4CH MOV BL,0B5H ADD AL,BL 执行上述程序片段后,(AL)= ,(BL)= , CF= ,OF= ,PF= . 2.阅读如下程序片段 MOV AL,0F3H MOV DL,0C4H ADD AL,DL AND AL,0FH 执行上述程序片段后,(AL)= ,(AF)= ,CF= ,OF= ,PF= . 3.阅读如下程序片段 MOV AL,7EH MOV CL,04H ROL AL,CL 执行上述程序片段后,(AL)= ,(CL)= , CF= ,OF= . 4.阅读如下程序片段 MOV AX,0632H MOV BX,0C202H SUB AX,BX INC AX 执行上述程序片段后,(AX)= ,(CF)= , OF= . 5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字 节单元(01025H)=28H MOV BX,0024H LEA BX,[BX] OR BX,0 ADC BX,[BX] 执行上述程序片段后,(BX)= ,(CF)= , OF= . 6.阅读如下程序片段,假设(SP)=0064H MOV AX,0001H MOV BX,0002H PUSH AX PUSH BX POP CX POP BX 执行上述程序片段后,(AX)= ,(BX)= , (SP)= , 五.程序设计题(本大题共 2 小题,第一小题 7 分,第二小题 8 分,共 15 分) 1.试编写一程序片段,实现 BL 高 4 位与低 4 位相互交换(7 分) 2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2 的功能(AX 中的数据理解为补最佳答案 1.逻辑地址 源程序经过汇编或编译后,形成目标程序,每个目标程序都是以 0 为基址顺序进行编址的,原来用符号名访问的单元用具体的数据――单元号取 代。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称 逻辑空间。 在逻辑空间中每条指令的地址和指令中要访问的操作数地址统称为逻 辑地址。 2.物理地址 内存是由若干个存储单元组成的,每个存储单元有一个编号,这种 编号可惟一标识一个存储单元,称为内存地址(或物理地址)。 3.标志寄存器 用来保存程序执行结果或者状态的寄存器,由各个标志位组成, 标志寄存器中的标志位分两种类型:状态标志位和控制标志位,分别用来反应结 果状态或控制程序执行的。 状态标志位常用的有 ZF(零标志位)、SF(符号标志位)、PF(奇偶标志位)、 CF(进位标志位)、OF(溢出标志位)、AF(辅助进位标志位); 控制标志位常用的有 DF(方向标志位,用于串处理操作方向控制的)、TF(单 步执行的跟踪标志位)、IF(中断允许标志位)。 4.存储器寻址方式 在指令中,有时要寻找操作数的地址,有时要寻找转移地址 (如转移指令、CALL 指令等),这些寻找地址的方式就称为寻址方式。8086 微处理器寻找操作数地址有七种方式:立即寻址、寄存器寻址、直接寻址、寄存 器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等;寻找转移 地址的方式有段内寻址和段间寻址, 它们又分为段内直接、 段内间接、 段间直接、 段间间接寻址等。 5.补码 补码是计算机底层运算中,对运算符的一种表示方法。主要功能是将减 法的运算转化为加法运算。 简单的说对于一个二进制数来说,正数的话它的原码,反码,补码都一样. 如果机器数是负数,反码是对它的原码(符号位除外)各位取反而得到的. 补码是对它的原码(除符号位外)各位取反,并在未位加 1 而得到的。 二.计算题(本大题共 5 小题,每小题 4 分,共 20 分)试按照各小题的要求给 出计算结果。 1.将十进制数 100 分别转换为二进制、十六进制数,它们的表示形式分别为多 少? (, (64)16 (BX)=0210H,对于指令 MOV DS:120H[BX],AL, 2.假设(DS)=0B00H, 其目的操作数的物理地址为多少? 0B00H*10H+210H+120H = B330H 3.假设(BX)=0210H,(DI)=0060H,对于指令 ADD DL,[BX][DI],其源 操作数的偏移量为多少? 这道题说的不明白,偏移量是相对于谁的,如果相对于段,210H+60H=270H 如果相对于基址,就是 DI,60H 4.假设当前(SP)=0060H,连续执行 5 条 PUSH 指令后,(SP)=? 执行 push,指针减小,每次占用两个字节,60H-2*5 = 56H 5.对于一个十进制数 C 65,其二进制补码表示形式为多少? (65)2 = 1000001,取反 0111110,加一 0111111,加符号
三. 排错题(本大题共 4 小题,每小题 5 分,共 20 分)每小题列出了一条指令, 判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正 确给 2 分,分析正确给 3 分,判断错误不给分。 1.PUSH 5588H ;push 的源操作数不能是立即数 2.MOV DS, 1720H ;给段寄存器赋值不能给立即数 3.ADD AX, CL ;AX 是 16 位的,CL 是 8 位的,不能相加 4.AND AX,[DX] ;DX 不是基址寄存器 四.程序分析题(本大题共 6 小题,每小题 5 分,共 30 分)每小题列出了一段 小的程序片段和相关存储单元的初始值, 请按题目的要求分析各程序片段的运行 结果。(寄存器中的内容请使用十六进制形式给出) 1.阅读如下程序片段 MOV AL,4CH MOV BL,0B5H ADD AL,BL 执行上述程序片段后,(AL)= 1H,(BL)=B5H , CF= 1,OF=0 ,PF=0 . 2.阅读如下程序片段 MOV AL,0F3H MOV DL,0C4H ADD AL,DL AND AL,0FH 执行上述程序片段后,(AL)=7 ,(AF)=0 ,CF=0 ,OF=0 ,PF=1. 3.阅读如下程序片段 MOV AL,7EH MOV CL,04H ROL AL,CL 执行上述程序片段后,(AL)= e7H,(CL)=4 , CF=1 ,OF=0 . 4.阅读如下程序片段 MOV AX,0632H MOV BX,0C202H SUB AX,BX INC AX 执行上述程序片段后,(AX)=4431H ,(CF)= 1, OF= 0. 5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字 节单元(01025H)=28H MOV BX,0024H ;bx = 24h LEA BX,[BX] ;bx = 56h,cf=1 OR BX,0 ;bx=56h, cf=0 ADC BX,[BX] ;应该加 56H 那个单元的内容 执行上述程序片段后,(BX)= 56H+[01056H],(CF)=取决于[01056H]是多少, OF= 取决于[01056H]是多少,. 这道题如果不是你贴错了,就是出题的搞错了 6.阅读如下程序片段,假设(SP)=0064H MOV AX,0001H MOV BX,0002H PUSH AX PUSH BX POP CX POP BX 执行上述程序片段后,(AX)= 1,(BX)=1 , (SP)= 64H, 五.程序设计题(本大题共 2 小题,第一小题 7 分,第二小题 8 分,共 15 分) 1.试编写一程序片段,实现 BL 高 4 位与低 4 位相互交换(7 分) push ax mov al,bl shl bx,1 shl bx,1 shl bx,1 shl bx,1 and al,f0 shr ax,1 shr ax,1 shr ax,1 shr ax,1 and al,0f or bl,al pop ax 2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2 的功能(AX 中的数据理解为补码)(8 分) push bx mov bx,ax shl ax,1 shl ax,1 add ax,bx add ax,14 shr ax,1 pop bx一、 填空题(15) 5. 指令中所用到的操作数可存放于 ______________ , ______________ 或 ______________ 中。 6. 子程序的参数传送方式有 ______________ , ______________ , ______________ 等。 7. 计算机中的指令由(操作数) 字段和地址码字段两部分组成。 二、 选择题(24) 1.用户为了解决自己的问题,用汇编语言所编写的程序,称为( ) A.目标程序 B.源程序 C.可执行程序 D.汇编程序 2.某系列微机对存储器的分段,如果每一个段最多的字节存储单元是 64K,那么 表示段内字节单元偏移地址的二进制位数应是( B ) A.20 位 B.16 位 C.15 位 D.12 位 3.设 SP 初值为 2000H,执行指令“PUSH AX”后,SP 的值是( B ) A.1FFFH B.1998H C.2002H D.1FFEH 4.循环指令 LOOP 产生循环的条件是( ) A.CX-1=1 B.CX-1=0 C.CX-1≠0 D.CF=1 和 ZF=0 5.汇编语言源程序中,每个语句可由四项组成,其中名字项是一个符号,下面列 出的有效名字是( ) A.Variable B.First & ld C.0FFFFH D.‘Memphis’ 6. 要求将 A,B 两个字符的 ASCⅡ码 41H,42H 顺序存放在连续两个字存储单 ) 元中,可选用的语句是( A.DA1 DB ‘AB’ B.DA1 DW ‘AB’ C.DA1 DB 0ABH D.DA1 DW ‘ABH 7.某程序装入内存后,DS=1200H,CS=1400H,则程序中数据段中的数据最多 )字节。 是( A.2K B.4K C.8K D.16K 8.有语句:COUNT EQU 256 下列四种叙述中,正确的是( )。 A.COUNT 是变量 B.COUNT 占用一个字节存储单元 D.COUNT 占用二个字节存储单元 C.COUNT 是符号常数 9.下面指令中,源操作数的寻址方式为立即寻址的是( )。 B.MOV AX,A A.MOV AX,OFFSET A C.MOV AX,1 D.MOV AX,A〔BX〕 10.下列指令执行后,不改变 AL 寄存器内容的指令是( )。 B.CMP AL,DL A.AND AL,1 C.XOR AL,AL D.SUB AL,DL 11.执行 1 号 DOS 系统功能调用,从键盘输入的字符值存放在( )寄存器中。 A.AL B.BL C.CL D.DL 12.将 CX 寄存器低 4 位清零的正确指令是( )。 A.AND CX,0F0H B.AND CX,0FFF0H C.AND CX,1110H D.MOV CX,0 最佳答案 一、 5、数据段、代码段、附加段(堆栈段也应该可以啊,怎么只有三个空?) 6、约定寄存器法、约定存储单元法、堆栈法 7、操作码 二、 1.B 2.B 3.D(这可是十六进制的操作哦,FFEH) 4.C 5.A 6. A 7.C (1H=2000H,转换成 10 进制是 8192,即 8k) 8.C 9.C 10.B 11.A 12.B2 回答时间: 08:48 | 我来评论一,单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在 单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在 题干后的括号内, 题干后的括号内,每小题 1 分,共 20 分)1.指令 JMP FAR PTR DONE 属于参考答案为:CA.段内转移直接寻址B.段内转移间接寻址C.段间转移直接寻址D.段间转移间接寻址[解析]略2.下列叙述正确的是参考答案为:CA.对两个无符号数进行比较采用 CMP 指令,对两个有符号数比较用 CMPS 指令B.对两个无符号数进行比较采用 CMPS 指令,对两个有符号数比较用 CMP 指令C.对无符号数条件转移采用 JAE/JNB 指令,对有符号数条件转移用 JGE/JNL 指令D.对无符号数条件转移采用 JGE/JNL 指令,对有符号数条件转移用 JAE/JNB 指令[解析]对于无符号数和有符号数的比较都采用 CMP 指令;CMPS 指令是串比较指令; 对两个有符号数的条件转移指令应是:JAE、JNB、JBE、JNA;对两个无符号数的条件转移指令应是:JGE、JNL、JLE、JNG。3.一个有 128 个字的数据区,它的起始地址为 12ABH:00ABH,请给出这个数据区 最末一个字单元的物理地址是 参考答案为:CA.12CSBHB.12B6BHC.12C59HD.12BFEH[解析]末字与首字相隔(128-1=)127 个字,且每个字占用 2 个字节,因此末字 单元的物理地址应为:首字单元的物理地址+(128-1)×2即 12ABH×10H+00ABH+(128-1)×2=12C59H。4.在下列指令的表示中,不正确的是参考答案为:CA.MOV AL,[BX+SI]B.JMP SHORT DONIC.DEC [BX]D.MUL CL[解析]当只有一个存储器操作数时,这个操作数的类型不明确,例如选项 C 中的 [BX], 没有明确的说明访问该存储单元的类型, 此时存储器操作数就必须需用类型说明, 如DEC BYTE PTR [BX] 或 DEC WORD PTR [BX] 但是在题目的选项 C 中, 没有指出存储器操作数类型, 所以该指令是不正确的; 而其它选项中的指令均是正确的。5.在进行二重循环程序设计时,下列描述正确的是参考答案为:AA.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内B.外循环初值应置外循环之内;内循环初值应置内循环之内C.内、外循环初值都应置外循环之外D.内、外循环初值都应置内循环之外,外循环之内[解析]循环参数置初值,应在进入循环以前给出。6.条件转移指令 JNE 的测试条件为参考答案为:AA.ZF=0B.CF=0C.ZF=1D.CF=1[解析]略。7.8086CPU 在基址加变址的寻址方式中,变址寄存器可以为参考答案为:DA.BX 或 CXB.CX 或 SIC.DX 或 SID.SI 或 DI[解析]略 8. 已知 BX=2000H, SI=1234H, 则指令 MOV AX, [BX+SI+2]的源操作在 ) ( 中。 考答案为:A参A.数据段中偏移量为 3236H 的字节B.附加段中偏移量为 3234H 的字节C.数据段中偏移量为 3234H 的字节D.附加段中偏移量为 3236H 的字节[解析]指令中的源操作数的寻址方式是相对基址变址寻址, 且由于其中的基址寄存 器采用的是 BX,所以源操作数是在数据段中,其偏移量为:BX+SI+2=H+2=3236H9.执行如下程序:MOV AX,0MOV BX,1MOV CX,100A:ADD AX,BXINC BXLOOP AHLT执行后(BX)=参考答案为:CA.99B.100C.101 D.102[解析]1)在进入循环之前,有三条指令分别初始化寄存器:AX 为 0、BX 为 1、CX 为 100;2)由于循环的控制部分采用的是 LOOP 指令,该指令有使 CX 减 1,并判断其是 否为 0 的功能,所以可知该循环的执行次数为 100 次;3)循环体的主要功能是每次循环使 AX 中的内容累加 BX 的内容,并使 BX 的内 容加 1。4)直到最后一次(即第 100 次)循环时,加到 AX 中的 BX 的内容为 100,且使 BX 加 1,即变为 101 后退出循环体。所以当执行完该段程序后,BX 的内容为 101。5)该段程序的功能是(AX)=1+2+……+100=505010.上题的程序执行后(AX)=参考答案为:BA.5000B.5050C.5100D.5150[解析]请参看上题中的分析。正确答案:B。11.对于下列程序段:AGAIN:MOV AL,[SI]MOV ES:[DI],ALINC SIINC DI LOOP AGAIN也可用______指令完成同样的功能。参考答案为:AA.REP MOVSBB.REP LODSBC.REP STOSBD.REPE SCASB[解析]该段程序的功能是将 SI 所指向的数据段中的数据顺序传送给 DI 所指向的附 加段的一段数据区中,并且每次传送一个字节,即实现了字节串传送的功能,所以也可 以使用 REP MOVSB 指令来完成同样的功能。12.下面指令序列执行后完成的运算,正确的算术表达式应是MOV AL,BYTE PTR XSHL AL,1DEC ALMOV BYTE PTR Y,AL参考答案为:DA.y=x2+1B.x=y2+1C.x=y2-1D.y=x2-1[解析]该段程序的第一条指令的功能是将 X 传送给 AL;第二条指令的功能是将 AL 的内容左移 1 位,即使得 AL 的内容扩大 2 倍;第三条指令的功能是使 AL 的内容减 1; 第四条指令的功能是将 AL 传送给 Y;综上所述该程序完成的运算是 Y=2X-1。13.在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来。 参考答案为:BA.占内存空间小,但速度慢B.占内存空间大,但速度快C.占内存空间相同,速度快D.占内存空间相同,速度慢[解析]1)宏指令简化程序的书写,不节省程序存储空间,但执行时间比子程序短。2)子程序简化程序的书写,也节省程序的存储空间,但执行时间比宏指令长。14.在程序执行过程中,IP 寄存器中始终保存的是参考答案为:BA.上一条指令的首地址B.下一条指令的首地址C.正在执行指令的首地址D.需计算有效地址后才能确定地址[解析]在程序运行过程中,它始终指向下一条指令的首地址,它与 CS 代码段寄存 器联合确定下一条指令的物理地址。15.PSW 寄存器中共有______位条件状态位,有______位控制状态位。 答案为:A参考A.6、3B.3、6C.8、4 D.4、8[解析]PSW 有 6 位条件状态位:AF、CF、ZF、PF、SF、OF;PSW 有 3 位控制状态位:IF、TF、DF16.下列指令执行时出错的是参考答案为:AA.ADD BUF1,BUF2B.JMP DWORD PTR DAT [BX]C.MOV AX,[BX+DI] NUMD.TEST AL,08H[解析]ADD 指令的两个操作数不能同时是存储器操作数,所以选项 A 中的指令是错 误的。17.已知(AX)=1234H,执行下述三条指令后,(AX)=参考答案为:DMOV BX,AXNEG BXADD AX,BXA.1234HB.0EDCCHC.6DCCHD.0000H[解析]第一条指令的功能是将 AX→BX,即 BX 中的内容为 1234H;第二条指令的功能是对 BX 求补,即 BX 中的内容变为-1234H;第三条指令的功能是 AX+BX→AX,即 1234H+(-1234H)=0→AX; 所以执行三条指令后,AX 的内容为 0。18.在下列指令中,______指令的执行会影响条件码中的 CF 位。 为:D参考答案A.JMP NEXTB.JC NEXTC.INC BXD.SHL AX,1[解析]JMP、JC 指令不任何影响状态标志位;INC 指令执行结果除不影响 CF 外,其余状态标志位(AF、OF、PF、SF、ZF)都受 影响。SHL 指令使 CF=O,OF=O,影响 ZF、SF、PF 标志位,AF 无定义。19.串指令中的目的操作数地址是由______提供。参考答案为:CA.SS:[BP]B.DS:[SI]C.ES:[DI]D.CS:[IP][解析]略20.将 DX 的内容除以 2,正确的指令是参考答案为:CA.DIV 2B.DIV DX,2C.SAR DX,1 D.SHL DX,1[解析]选项 A 中的的指令执行的操作是:AX/2;选项 B 中的的指令书写格式不正确;选项 C 中的的指令执行的操作是:将 DX 的内容右移一位,将使 DX 的内容缩小 为原先的 1/2,即将 DX 的内容除以 2;选项 D 中的的指令执行的操作是:将 DX 的内容左移一位,将使 DX 的内容扩大为原 先的 2 倍,即将 DX 的内容乘以 2。二,简答题(每小题 4 分,共 12 分) 简答题(1.假定(DX)=B,(CL)=0.3,(CF)=1,试确定下列各条指令单独执 行后,DX 中的值。(1)SHR DX,1(2)RCR DL,1(3)RCL DX,CL答:(1) 005CH (2) 00DCH (3) 05CCH[解析](1)指令:SHR DX, 1 使 DX 的内容向右移动 了一位,因此 DX 的内容变为 ’B, 即 005CH。(2)指令:RCR DL, 1 使 DL 的内容向右循环带进位 移动了一位,DH 的内容不变, 因此 DX 的内容变为 ’B, 即 00DCH。(3)指令:RCL DX, CL 使 DX 的内容向左循环带进位移动了 3 位,因此 DX 的内 容变为 ’B,即 05CCH。2.写出完成下述功能的程序段:(1)传送 25H 到 AL 寄存器(2)将 AL 的内容乘以 2(3)传送 15H 到 BL 寄存器(4)AL 的内容乘以 BL 的内容并请写出最后(AX)=?答:(1)MOV AL, 25H(2)SHL AL, 1(3)MOV BL, 15H(4)MUL BL最后,(AX)=612H =1554[解析]1)将 AL 的内容左移 1 位,将使它的内容扩大 2 倍,即使 AL 的内容乘 以 2。2)最后,AX 的内容应为 25H*2*15H=612H=15543.写一程序段,求双字长数 DX∶bX 的相反数。答:NEG DXNEG AXSBB DX, 0 [解析]求双字长数 DX:AX 相反数,即对其求补,所以应实现的操作是:(DX:AX) ← 0-(DX:AX)即 0 : 0-) DX : AX将上面的算式分解后,即为对 DX 求补,对 AX 求补,并从 DX 中减去将 AX 求补 时产生的借位。所以相应的指令就是:NEG DXNEG AXSBB DX, 0三,程序分析题(每小题 6 分,共 36 分) 程序分析题(1.现有如下程序段:DATA SEGMENT DA3 EQU 1234HORG 0020H DA4 EQU $-DA2DA1 DW 12H,23H DA5 DB 31H,32HDA2 DB 11H,21H DATA ENDS请回答:(1)该程序段已占有的存储字节数是多少?(2)符号名 DA4 的值是多少?符号名 DA5 的值是多少?答:(1) 该程序段已占有的存储字节数是 8 个字节。(2) 符号名 DA4 的值为 2,符号名 DA5 的值是 0026H。[解析]1)伪指令 ORG 0020H,设置存储单元起始偏移地址为 0020H; 2)符号名 DA1 的值(即所对应存储单元的偏移地址)是 0020H,该数据区的类 型为字,有 2 个字数据,所以共占用 4 个字节;3)符号名 DA2 的值(即所对应存储单元的偏移地址)是 0024H,该数据区的类 型为字节,有 2 个字节数据,所以共占用 2 个字节;4)经 EQU 定义的符号名 DA3、DA4 不占用存储空间,“$” 用来表示当前地址 计数器的值(0026H),可它们的值分别为 DA3=1234H, DA4=2。5)符号名 DA5 的值(即所对应存储单元的偏移地址)是 0026H,该数据区的类 型为字节,有 2 个字节数据,所以共占用 2 个字节;6)综上所述,该程序段共占有的存储字节数 8 个字节。2.执行下列程序段后,回答问题。ORG 1221H MOV BX,OFFSET NUMNUM DW 12H MOV CL,BYTE PTR NUM+1… MOV CH,TYPE NUMMOV AX,NUM HLT请问:(AX)=______,(BX)=______,(CX)=______。答:(AX)=0012H (BX)=1221H (CX)=0200H[解析]1)指令 MOV AX, NUM 的功能是将 NUM 单元的字内容 12H 传送给 AX,使 得(AX)=0012H;2) 指令 MOV BX, OFFSET NUM 的功能是将 NUM 单元的偏移地址 1221H 传送给 BX, 使得(BX)=1221H;3)指令 MOV CL, BYTE PTR NUM+1 的功能是将 NUM+1(1222H)单元的字节内容(即 NUM 字单元的高字节)00H 传送给 CL,使得(CL)=00H;4)指令 MOV CL, TYTE NUM 的功能是将 NUM 字单元的类型字节数 2 传送给 CH, 使得(CH)=02H; 5)综合第 4 和第 5 点,可知 CX 寄存器的内容为 0200H。3.阅读如下程序:ADRR DB XXH,XXH,……,XXH CMP ADRR[BX],0NUM EQU $ -ADRR LOOPZ DONRETT DB? JNZ NEXT… MOV BL,OFFHMOV CX,NUM NEXT:MOV RETT,BLMOV BX,-1 HLTDON:INC BX请问:(1)该程序完成的功能是什么?(2)程序执行后指出 RETT 字节单元中的内容是什么?答:(1) 在以 ADRR 为起始地址的数组中,查找第一个非 0 数据。(2) 若找到则将第一个非 0 数据在数组中的偏移量送入 RETT 单元中; 若无非 0 数据,则将 OFFH 送入 RETT 单元中。[解析]1)程序的前 3 条指令,用于定义数据:以 ADRR 为起始地址的数组;NUM 的值为 ADRR 数组的数据个数;RETT 是一个空的字节单元2) 该程序的主体是一个循环, 该循环的主要功能是在数组 ADRR 中第一个非 0 数据。 如果是由于找到,则将第一个非 0 数据在数组中的偏移量送入 RETT 单元中;若没找到 非 0 数据,则将 OFFH 送入 RETT 单元中。4.现有一子程序: SUB1 PROC PLUS:TEST BL,80HTEST AL,80H JE EXITOJE PLUS XCHANGE:XCHG AL,BLTEST BL,80H EXITO:RETJNE EXITO SUB1 ENDPJMP XCHANGE试回答:(1)子程序的功能是什么?(2)若调用子程序前 AL=9AH,BL=77H, 则返回主程序时,AL=______, BL=______。答:(1)子程序的功能是判别 AL 和 BL 中的数是否为异号数,当为异 号时交换,否则不变。(2) AL=77H, BL=9AH[解析]1)数据是以二进制的形式存储在计算机中的。数据对应的二进制数的 最高位是数据的符号位:若为 0 表示该数为正数,若为 1 表示该数为负数;2)TEST AL, 80H 和 TEST BL,80H 指令是在测试 AL 和 BL 的最高位(即符号位) 的状态是 1 还是 0。3)若两个数的最高位(即符号位)的状态不同的时候(即两数为异号),则 执行 XCHANGE 标号所对应语句,即交换 AL 和 BL 中的内容。4)否则若两个数的最高位(即符号位)的状态相同的时候(即两数为同号), 则执行 EXIT0 标号所对应语句,程序结束,即 AL 和 BL 中的内容不被。5)所以第二问中,AL=9AH,BL=77H:AL 中的数据的最高位为 1,BL 中的数据的 最高位为 0,即两个数为异号,所以要交换 AL 和 BL 中的内容,即 AL=77H,BL=9AH。5.阅读程序段: BLOCK DB 20H,1FH,08H,81H,OFFH… LOP1:CMP AL,[SI+1]RESULT DB? JNG NEXT… MOV AL,[SI+1]START:LEA SI,BLOCK NEXT:INC SIMOV CX,[SI] LOOP LOP1INC SI MOV RESULT,ALMOV AL,[SI] HLT请问:(1)该程序完成的功能是什么?(2)该程序循环的次数是多少?答:(1) 该程序完成的功能是从 20H(32)个有符号数中找出最小的 数送入 RESULT 单元中。(2) 该程序的循环次数是 1FH(31)。[解析]1)指令 LEA SI, BLOCK 的功能是使 SI 指向了 BLOCK 数组的首单元;2) 指令 MOV CX, [SI]的功能是将 SI 指向单元的内容 20H 传送给 CX, 即(CX)=20H; 其后又有指令 DEC CX,使得 CX 的内容变为 1FH;再看循环体的控制部分采用的指令是 LOOP,可知,该循环的执行次数为 1FH 次;3) 循环体的主要功能是将 AL 中的内容与[SI]所指向数组的每一个数据进行比 较,从数组中选出最小数保存在 AL 中。4) 由于比较后采用的转移指令是 JNG, 所以该程序处理的显然是一组有符号的 数据。6.阅读如下程序段,回答所提出的问题,假定 X1,X2,XN 为无符号数。ORG 100H BLOK DW X1,X2,…,XNCOUNT EQU($-BLOLOK)/2RESULT DW COUNT,?LEA BX,BLOK-2MOV CX,RESULTXOR AX,AXGOON:ADD BX,2CMP AX,[BX]JAE NEXTMOV AX,[BX]NEXT:LOOP GOONMOV RESULT+2,AX程序段执行完,回答下述问题RESULT+2 字存储单元的内容=______BX=______程序循环次数=______答:RESULT+2 字存储单元的内容是 MAX(X1, X2, … XN)BX= 100H + 2×(COUNT-1)程序循环次数= COUNT[解析]1)该程序段的开始 4 条指令定义了以下数据: 以 BLOK 为起始地址的字数组,该数组首单元的偏移地址(即 BLOK)为 100H;COUNT 的值为 BLOK 字数组的数据个数;RESULT 存储区的第一个字的内容为 COUNT,即 BLOK 字数组的数据个数;第二 个字的内容为空。2)循环体的主要功能是从 BLOK 字数组中找出最大数送入 RESULT 的第二个字 单元中;3)循环次数为数组中数据的个数,即 COUNT 个。4)当循环结束后,BX 中将存放最后一个字数据的偏移地址:首字偏移地址+ 末字与首字的相隔的字节数,即 100H + 2×(COUNT-1)。四,程序填空题(注意:下列各小题中,每空只能填一条指令!每小题 6 分,共 12 分) 程序填空题(注意:下列各小题中,每空只能填一条指令!1.在表 TABLE 处存放着 N 个无符号字节数,求表中前 10 个字节数的总和并保存在 AX 寄存器中。如果总和值超过 AX 寄存器的容量,则置 AX 寄存器内容不变。请在程序中 的空格处填入适当指令使其完整。LEA BX,TABLE (2)MOV CX,10 JC END0MOV SUM,AX DON:INC BXMEXT:(1)(3)ADC AH,0 ENDO:HLTJNC DON答:(1) ADD AL, [BX](2) MOV AX, SUM(3) LOOP NEXT [解析]1)程序的前三条指令的功能分别是:将表 TABLE 的首址传送给 BX;将循环次数传送给计数器 CX;将 AX 的原值保存在 SUM 单元中;以上指令实现了设置循环初始参数的功能。2)标号 NEXT 所对应的第一个空白处就是循环体的第一条指令。根据题目的要 求――求表中前 10 个字节数的总和,可知循环每次应实现将表 TABLE 中的数据按字节 加法的方式进行累加到 AL 中,并且将字节加法产生的进位加到 AH 中。所以第一个空白 处应填入指令:ADD AL, [BX]3)程序的第五条指令实现的是判断求得的和是否超过 AX 寄存器的容量。4)如果有进位(即已超过 AX 寄存器的容量),则执行第二个空白处的指令, 根据题目当出现此种情况时,使 AX 内容不变,即恢复其原值,因此第二个空白处应填 入指令:MOV AX, SUM。5)如果没有进位(即未超过 AX 寄存器的容量),则转 DON。程序将使 BX 的内 容加 1,即使其指向下一个表中的字节数据。接下来就应该将计数器 CX 减 1,并判断是 否继续下一次循环。因此,第三个空白处应填入指令: LOOP NEXT。2.BEG 为起始地址的存储区域中存放有 100 个字节数据,现将其首、尾颠倒过来, 重新排放这 100 个字节数据。请在程序中的空格处填入适当的指令使其完整。MOV CX,32HLEA SI,BEGMOV DI,SI(1)DON:MOV AL,[SI] (2)MOV [SI],AL(3)DEC DILOOP DONHLT答:(1) ADD DI, 99(2) XCHG AL, [DI](3) INC SI[解析]1) 题目要求:将以 BEG 为起始地址的区域中的 100 个字节数据首尾颠 倒存放。例如,如果原先为 X1,X2, X3,…, X98, X99, X100,则首尾颠倒后将变为 X100, X99, X98,…,X3, X2,X1。2) 颠倒的方法是:将 X1 与 X100 对调、X2 与 X99 对调、X3 与 X98 对调、……, 即将前一半的数据与后一半相应位置的数据对调。这个过程每次处理两个数据,所以共 有(100/2=)50 对数据对调。3) 根据以上分析可知,这个循环将进行 50(32H)次,每次将相应的两个数据 对调,这两个数据可分别由两个寄存器来指向。4) 阅读程序可知,SI 寄存器指向前一半中的某个数据,DI 寄存器指向后一半 中对应的数据。在循环的初始化部分,使应计数器 CX 的值为 50(或 32H),SI 指向第 一个数,DI 指向最后一个数,所以第一个空白处应填入指令:ADD DI, 99。5) 在循环体中, 应首先交换 SI 和 DI 所指向单元的内容, 然后使指针 SI 加 1、 DI 减 1,所以第二、三个空白处应填入指令:① XCHG AL, [DI]② INC SI 五,编制程序题(第 1 小题 6 分,第 2 小题 14 分,共 20 分) 编制程序题(1.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答:1.BEGIN:MOV AH,1INT 21HCMP AL,’a’JB STOPCMP AL,’z’JA STOPSUB AL,20HMOV DL,ALMOV AH,2INT 21HJMP BEGINSTOP:RET[解析]1) 该程序设计的主体应是一个循环――当输入字符的是小写字母 (a ~ z)时,就将其转换为大写字母来显示,此过程循环进行,直到当输入的不是小写字母 时,程序结束。2)输入一个字符的可使用 DOS 的 1 号功能实现:MOV AH, 1INT 21H该 DOS 调用执行完后,会将输入的字符的 ASCII 码值送入 AL 寄存器。 3)判断输入的是否为小写字母(a ~ z)的方法:CMP AL, ‘a’JB STOP ;不是小写字母时,转 STOPCMP AL, ‘z’JA STOP ;不是小写字母时,转 STOP… ;是小写字母时,将其转换为大写显示STOP: RET ;不是小写字母时,程序结束4)小写字母比大写字母的 ASCII 码值大 20H,因此指令 SUB AL, 20H,将使 AL 中的内容变为大写字母的 ASCII 码值。5)输出一个字符的可使用 DOS 的 2 号功能实现:MOV DL, ALMOV AH, 2INT 21H2.设在内存单元 SQTAB 首址开始存放了 0~15 的平方数表。要求用直接查表法编 一程序,求出 A 单元中给定数(<=15=的平方值送 B 单元保存。答:DATA SEGMENTSQTAB DB 0,1,4,9,16,25,36,49,64,81DB 100,121,144,169,196,225A DB 12B DB?DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARPUSH DXXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET SQTABMOV AL,AXLATMOV B,ALRETSTART ENDPCODE ENDSEND START[解析]1)根据题目的要求,应首先建立 0~15 的平方数表以及 A 和 B 单元:SQTAB DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 ;平方数表DB 100, 121, 144, 169, 196, 225A DB 12 ;给定数(&=15) B DB ? ;存放 A 中数的平方值的结果单元2)A 中给定的数恰好是该数平方值在平方数表中的相对位置,因此,可通过换 码指令 XLAT 来实现从表中求平方值:MOV BX, OFFSET SQTABMOV AL, AXLAT
更多相关文档

我要回帖

更多关于 中考化学计算题汇编 的文章

 

随机推荐