汇编期末测试冲刺

一、填空题

(1) 一个十进制数35.625其对应的二进制数为 100011.101B 、十六进制数为 23.aH

(2) 将 -8 存放在一个字单元中,则该单元中二进制代码是 0FFF8H

(3) 计算机软件分为两个部分即 系统软件 应用软件 而汇编程序属于 系统软件 , 汇编语言应用程序属于 应用软件

(4) 把汇编语言源程序翻译成计算机能够识别、执行的目标程序的软件称为 汇编程序

(5) 8086/8088 CPU内部一般用来存放数据的寄存器有 AX BX CX DX

(6) 8086/8088 CPU内部用来存放段地址寄存器的有 CS DS SS ES

(7) 逻辑地址由 段地址与偏移地址 组成。

(8) 一个语句的名字项可以是标号或变量,在程序中它们两个在书写形式上的主要区别是 标号以冒号结尾 而变量不以冒号结尾

(9) 在PSW中,用以记录当前运算结果特征信息的那些位称为 状态标志位 , 一般是由 CPU 自动设置。

(10) 储存器单元与物理地址的关系是 一一对应 ,在一个逻辑段内,每个单元对应的段地址是 相同的 ,而偏移地址是 不同的

(11) 在I/O接口中,为每个可访问的寄存器分配的地址是 端口地址

(12) 用以指示当前堆栈栈顶的指针寄存器是 SP

(13) 机器指令是一组规定计算机的操作类型及相关操作数的 二进制代码

(14) 假设执行指令前BX=5678H,CL=8,指令ROL BX,CL执行后BX的内容是 7856H

(15) 一条指令的基本结构一般由 操作码字段 操作数字段 两个部分组成。

(16) 8086/8088 存储器地址分段时,每个段起始地址的特征是 二进制表示的地址中低四位都为 0

试题解析:

每个段被划分为256字节为一个块, 所以段的起始地址必须是能被16整除的地址,所以低4位二进制码都是0

(17) 所谓“寻址方式”是指在指令中用以说明操作数所在 地址或位置 的方法。

(18) 在指令中直接给出操作数的寻址方式称为 立即数寻址

(19) 无符号数和带符号数的两组条件转移指令,每条指令都有完全等效的两个指令助记符,例如,JL 指令另一个指令助记符是 JNGE

(20) 8086/8088指令系统中,用以描述(说明)寄存器操作数的寻址方式是 寄存器寻址方式

(21) 设MASK为一个变量,在“MOV AX,MASK[SI + BX]”指令中,源操作数的寻址方式是 相对基址变址寻址方式

(22) CPU执行“JMP BX”指令只改变 IP 内容 ,而不改变 CS 内容。

(23) 每次进行串扫描指令SCAS时,要进行递增或递减修改的变址寄存器是 DI

(24) 段间间接基址BX变址SI寻址的无条件转移指令是 JMP DWORD PTR[BX+SI]

(25) 使用“MUL BX”指令时,乘数放在 BX 中,被乘数放在 AX 中,执行该指令后结果在 DX,AX 中。

(26) 执行带符号数字节相乘指令IMUL BL后,CF=1,OF=1意味着 高位不是低位的符号扩展

试题解析:

字节乘结果16位,存于AX中,高8位AH ,低8位AL 。
高位是低位的符号扩展:
低位是指积的值部分,高位指积的符号部分。 常常是字节乘的结果不足16位,字乘的结果不足32位,多出的位怎么办? 就进行符号扩展,由于多出的位是高位,所以叫高位符号扩展。
举个例子:
mov al,0b4h
mov bl,11h
imul bl
操作为 AL * BL 结果存于 AX 中,其中 (AH) = FAH,(AL) = F4H
结果的二进制式为 1111010011111010B
显然数值部分是010011111010,加上一位符号位是不足16位的,而符号部分是1111有四位, 并不是我们习惯的一位,这就是进行了高位符号扩展的结果。 为什么要进行扩展?是因为结果的位数在指令中是一定的,计算机不可能根据我们结果的实际位数而调整结果的位数, 所以不足的位必须补足,这样高位扩展符号的做法是即能够满足结果位数约定,又不影响结果值的正确性的。 高位扩展符号的原则是正数填0负数填1。
而符号扩展是CF=0;OF=0;或者CF=1,OF=1 ,这是一种约定或者说是标识,在处理结果时, 计算机会根据CF、OF的状态判断是否有符号扩展,从而做出相应正确处理。

(27) 在串操作指令中,使地址自动加1或加2必须使用指令 CLD 将方向标志DF置 0 ,源串必须在 数据 段中,而目的串必须在 附加 段中。

(28) 若要测试AL中操作数的第0,1,2,7位是否为0,根据结果实现条件转移,可使用 TEST AL,87H 指令。

(29) 8086/8088 CPU允许最大的存储空间为1MB,因此CPU的地址总线是 20 位。

(30) 与LOOP yeqianyi指令功能等效的两条指令依次是 DEC CX JNZ yeqianyi

(31) 将AX寄存器清零的逻辑指令是 AND AX,0 XOR AX,AX

(32) 在指令语句操作数项上,引用一个段名,就是获取段地址的 立即 数据。

(33) 执行查表指令XLAT时,要先将表地址存放在 BX 中,将位移量存放在 AL

(34) 十进制调整指令DAA或AAA必须放置在 ADD或 ADC 指令之后,只对 AL 内容进行修正。

(35) 假设执行前AX=7862H,指令XOR AX,AX执行后AX中的值是 0

(36) 指令CBW只能实现对寄存器 AL 的内容进行扩展,而它当中存放的数据应该是一个 带符号 数。

(37) 比较两个带符号A与B的大小,若(OF) ⊕ (SF)=0,则A-B ≥ 0

(38) 变量的类型属性指的是该变量对应存储单元的 字节数

(39) VAR1 DD 10H DUP(?)语句实现留空 64 个字节单元。

(40) 在源程序中定义一个逻辑段,使用 SEGMENT 语句表示一个段的开始,用 ENDS 语句表示一个段的结束。

(41) 汇编语言源程序中的语句有三种类型,它们是宏指令语句, 指令语句 伪指令语句

(42) ARRAY DB 0,2 DUP(1,2),0,3汇编时生成的数据依次是 0,1,2,1,2,0,3

(43) 在指令语句和伪指令语句中常用符号 $ 表示地址计数器的当前值。

(44) 指令MOV AX,SEG BUF的执行,是把 BUF的段地址 送到AX中。

(45) 用DW 1200H 语句定义的一个字,如改用DB语句定义时,该语句是 DB 00H, 12H

(46) 如果过程与调用的主程序处在同一代码段,这样的过程属性是 NEAR ,与调用它的主程序处于不同的代码段,则该过程属性是 FAR

(47) 在数据段或代码段中,常用伪指令 “ORG n” 来定义本段的偏移地址初值,该初值的范围是 0000H-0FFFFH

(48) 在存储单元yeqianyi开始,欲保留100个字长的存储单元,应使用的数据定义伪指令是 yeqianyi DW 100 DUP(?)

(49) 在存取一个存储器操作数时,段地址必须由 段寄存器 提供。

二、选择题

(1) 能够将目标模块或子程序连接起来,生成可执行文件的系统程序是____百度

①DEBUG ②LINK ③MASM ④EDIT

(2) 用汇编语言编写的程序称为____百度

①汇编程序 ②源程序 ③可执行文件 ④目标程序

(3) 汇编语言源程序文件的扩展名为____百度

①OBJ ②EXE ③COM ④ASM

(4) 设(101)x = (41)16 求x=____百度

①6 ②10 ③8 ④2

(5) 内存某字节单元中存放的二进制代码为94H,若将它看作是一个压缩BCD码,则其对应的数值为____百度

①148 ②-20 ③-108 ④94

(6) 当执行ADD AX,BX指令后,若AX的内容为4E52H时,设置的奇偶标志位PF=0,下面的叙述正确的是____百度

① 表示结果中含1的个数是奇数

② 表示结果中含1的个数是偶数

③ 表示该数是奇数

④ 表示结果中低8位中含1的个数是奇数

(7) 要输入端口1234H中的8位数据,其指令应是____ 百度

①MOV DX,1234H
 OUT DX,AL

②MOV DX,1234H
 IN AL,DX

③IN AX,1234H

④OUT DX,1234H

(8) 下列寄存器组中,在访问存储器操作数地址时,可以提供偏移地址的是____ 百度

① BP、BX、SI、DI

② AX、BX、CX、DX

③ SP、IP

④ BX、SI、DI、DS

(9) IBM PC机的存储器单元的物理地址是用____表示的。百度

① 5位十进制数

② 20位无符号二进制数

③ 4位十六进制数

④ 20位带符号二进制数

(10) 能够与SS寄存器组合形成堆栈区物理地址的寄存器是____百度

① BX ② BP ③ IP ④ SI

(11) 若AX=-15要得到AX=15应执行的指令是____ 百度

① NEG AX ② NOT AX ③ INC AX ④ DEC AX

(12) 取指令的物理地址表达式为____百度

① (DS)×10H+(BX)

② (SS)×10H+(SP)

③ (ES)×10H+(SI)

④ (CS)×10H+(IP)

(13) 可以作为一个段的起始地址的是____百度

① 21002H ② 00104H ③ 01000H ④ F0008H

(14) 在标志寄存器FLAGS中,用以记录当前运算结果是否为零的标志是____百度

① CF ② OF ③ SF ④ ZF

(15) 8086/8088对I/O端口寻址范围是____百度

① 16KB ② 32KB ③ 64KB ④ 1MB

(16) 8086/8088系统执行传送指令MOV时____百度

① 不影响标志位

② 影响DF方向标志 

③ 影响SF符号标志

④ 影响CF进位标志

(17) 设物理地址(21000H)=20H,(21001H)=30H,(21002H)=40H, 如从地址21001H中取出一个字的内容是____ 百度

① 2030H ② 3040H ③ 3020H ④ 4030H

(18) 若内存中有100个字节数据区,其首地址为10210H,那么其最末一个字节单元的地址是____百度

① 10274H

② 10310H

③ 1021H:0063H

④ 1021H:0064H

(19) 假设存储器中从7462H单元开始的四个相邻字节单元中的内容依次是32H,46H,52H,OFEH,则存放字数据0FE52H的字地址是____ 百度

① 7462H ② 7463H ③ 7464H ④ 7465H

(20) 将-1存入AX中,其内容为____百度

① FFFFH ② -0001H ③ FFH ④ 8001H

(21) 在段内寻址时,可以提供偏移地址的寄存器组是____百度

① AX,BX,CX,DX

② BX,BP,SI,DI 

③ SP,BP,SI,DI

④ DS,ES,CS,SS

(22) 将AX的内容存入堆栈正确的指令是____百度

① MOV [SP],AX

② POP AX 

③ PUSH AX

④ MOV SS:[SP],AX

(23)
MOV AL,79
ADD AL,0B1H
上面的指令执行后,设置的标志位CF和OF的值是____百度

① CF=0,OF=1

② CF=1,OF=1 

③ CF=0,OF=0

④ CF=1,OF=0

(24) 能够将BL的低四位清“0”的指令是____百度

① AND BL,0F0H

② OR BL,00H

③ OR BL,0F0H

④ AND BL,00H

(25) 已知AX、BX中均为带符号数,当进行字相除时,下面指令或指令序列正确的是____ 百度

① DIV BX

②CWD
 IDIV BX

③XOR DX,DX
 DIV BX

④CBW
 IDIV BX

(26) 没有语法错误的输入指令是____ 百度

① IN AL,30H

② IN 30H,AL

③ IN DX,AL

④ IN AL,[BX]

(27) 设(AL)=63H (BL)=29H 执行下面指令后
 SUB AL,BL
 DAS
 AX的内容是____ 百度

① (AX)=0304H

② (AX)=0034 

③ (AX)=0034H

④ (AX)=0304

(28) 算术右移指令SAR和逻辑右移指令SHR,两条指令执行结果完全相同的条件是____ 百度

① 目的操作数最高位为0

② 目的操作数最高位为1

③ 目的操作数为任意情况

④ 无论什么情况都不可能完全相同

(29) 设OP1、OP2是变量,下面哪条指令是非法的 百度

① CMP AX,OP1

② CMP OP1,OP2

③ CMP BX,OP2

④ CMP OP,0FFH

(30) 在执行十进制调整指令前,必须先把需要调整的数送入 百度

① AL ② AX ③ DL ④ DX

(31) 下列指令中操作数在代码段中的是____ 百度

① MOV EAX,123400FEH

② ADD EBP,EAX 

③ SUB [BX],DI

④ INC WORD PTR[BX]

(32) 设AL=0A8H,CL=23H,执行乘法指令MUL CL后,标志位OF,CF的值分别是____ 百度

① OF=1,CF=1

② OF=1,CF=0 

③ OF=0,CF=1

④ OF=0,CF=0

(33) 设DF=0,SI=20H,CX=10,执行REP LODSW指令后,SI中的内容是____ 百度

① 20H ② 30H ③ 34H ④ 40H

(34) 在串操作指令中,使用重复操作前缀不正确的是____百度

① REP MOVSB

② REP LODSB 

③ REP STOSB

④ REPNZ SCASB

(35) 设有变量VAR和标号LAB,不正确的指令是____ 百度

① LEA AX,VAR

② LEA AX,LAB 

③ JMP NEAR PTR VAR

④ JMP SHORT LAB

(36) 指令CALL DWORD PTR VALUE 属于 寻址方式。百度

① 段内直接调用 ② 段内间接调用 ③ 段间直接调用 ④ 段间间接调用

(37) 用REPE SCASB指令对字符串进行扫描,如CX≠0时,扫描结束,那么表示____百度

①在字符串中遇上第一个AL中指定的字符

②在字符串中有一个AL中指定的字符

③在字符串中有一个不是AL中指定的字符

④ 在字符串中遇上第一个不是AL中指定的字符

(38) 指令LOOPNE LOP的循环条件是____百度

① (ZF)=0,(CX)=0

② (ZF)=0,(CX)≠0

③ (ZF)=1,(CX)=0

④ (ZF)=1,(CX)≠0

(39) 累加器AX内的内容为01H,执行CMP AX,01H指令后,(AX)=____百度

① 0H ② 1H ③ -2H ④ 2H

(40) 指令执行后可能改变了累加器内容的是____ 百度

① OR AL,00H

② AND AL,0FFH

③ XOR AL,AL

④ TEST AL,0FFH

(41) 在指令PUSH AX的执行过程中,要进行____操作百度

① (SP)-2SP

② (SP)+1SP 

③ (SP)-1SP

④ (SP)+2SP

(42) 设A、B均为无符号数,若A≥B则转向VALUE处,给出错误的条件转移指令是____百度

① JNB VALUE

② JAE VALUE 

③ JNC VALUE

④ JNS VALUE

(43) 设SP的初值为1000H,执行指令PUSH AX后SP的值是____ 百度

① 0FFFH ② 1001H ③ 0FFEH ④ 1002H

(44) 下列指令中,非法的是____百度

① MOV AL,DX

② SHR DX,CL

③ IN AL,DX

④ OUT 02,AL

(45) 下列指令执行后对源操作数和目的操作数均无影响的是____ 百度

① MOV [BX+2],AX

② SUB AX,2476H

③ SBB [SI],BX

④ CMP AX,BX

(46) 设AX中存放的是带符号数,对其进行除8操作,能够完成此项功能的指令序列是____ 百度

①SHR AX,2
 SHR AX,2

②SAR AX,2
 SAR AX,1 

③MOV CL,3
 SHR AX,CL

④MOV CL,3
 SAR AX,CL

(47) 设AL中是无符号数,试将AL内容扩展后送入BX中, 能够完成此项功能的指令序列是____百度

①CBW
 MOV BX,AX

②MOV AH,0
 MOV BX,AX

③MOV AH,0FFH
 MOV BX,AX

④MOV BL,AL
 MOV BH,AH

(48) 若(AX)=1234H,(DX)=89ABH,执行XCHG AX,DX指令后,AX、DX中的内容应是____百度

① (AX)=1234H (DX)=1234H

② (AX)=12ABH (DX)=8934H

③ (AX)=89ABH (DX)=1234H

④ (AX)=89ABH (DX)=89ABH

(49) (CF)=1时转移到目标地址的条件转移指令是____百度

① JNC ② JC ③ JZ ④ JS

(50) 汇编语言源程序,可以是____ 百度

①可以直接由机器执行

② 必须由编译程序生成目标程序才能执行

③ 必须由解释程序生成目标程序才能执行 

④ 必须由汇编程序汇编成目标程序才能执行

(51) 完成(BX)-(CX) -> AX的错误指令是____百度

①SUB BX,CX
 MOV AX,BX

②XCHG AX,CX
 SUB AX,BX

③XCHG AX,BX
 SUB AX,CX

④MOV AX,BX
 SUB AX,CX

(52) 下列指令中操作数在代码中的是____百度

① MOV AL,[100H]

② MOV AL,00H

③ MOV [20H],AL

④ MOV AL,BL

(53) 下列指令中,影响或修改PSW内容的指令是____百度

① PUSHF ② POPF ③ JCXZ ④ LOOPZ

(54) 下列有语法错误的语句是____百度

① DB 12H

② DW 4567H

③ DD ‘ABCD’

④ DB ‘ABCD’

(55) AL、BL中都是无符号数,若(AL)>(BL)时,转到NEXT处。在执行CMP AL,BL指令后应选用的指令是____百度

① JNBE NEXT

② JNLE NEXT 

③ JBE NEXT

④ JLE NEXT

(56) 使状态标志位CF清零的错误指令是____百度

① CLC

② XOR AX,AX

③ SUB AX,AX

④ MOV CF,0

(57) 执行POP AX 指令正确的CPU操作过程是____百度

①i (SP)+1 -> SP,((SP)) -> AL
 ii (SP)+1 -> SP,((SP)) -> AH

②i (SP)+1 -> SP,((SP)) -> AH
 ii (SP)+1 -> SP,((SP)) -> AL

③i ((SP)) -> AL,(SP)+1 -> SP
 ii ((SP)) -> AH,(SP)+1 -> SP

④i ((SP)) -> AH, (SP)+1 -> SP
 ii ((SP)) -> AL, (SP)+1 -> SP

(58)
MOV BX,0FFFEH
NEG BX
NOT BX
上述三条指令执行后,BX中的内容是____ 百度

① -1 ② -2 ③ -3 ④ -4

(59)
ORG 200H
BUF DB 12H,34H
~~~
MOV AX,WORD PTR BUF
上述指令语句执行后,AX中的内容是____ 百度

① 3412H ② 1234H ③ 0200H ④ 0012H

(60) 执行NEG指令对状态标志位CF有影响,其规则是____百度

① 对正数求补时,(CF)=0

② 对负数求补时,(CF)=0

③ 对非零数求补时,(CF)=1

④ 对零求补时,(CF)=1

(61) 已知AL内容为压缩BCD码,对它进行加“1”操作,其中错误的指令序列是____百度

①INC AL
 DAA

②ADD AL,1
  DAA

③ADC AL,1
 DAA

④STC
 ADC AL,0
 DAA

(62) 设数据段有:DA1 DB XX;是任一数据
 DA2 DB 0FEH
则下列两条指令:MOV DL,DA1
 OR DL,DA2
执行后,DL中的内容可能是____ 百度

① 0FFH或0FEH ② 只能是0FEH ③ 只能是0FFH ④ 只能是01H

(63)
DB1 DB 8 DUP(2 DUP(3),3 DUP(2))
~~~
MOV AX,WORD PTR DB1[04H]
上面指令执行后,AX的内容是____ 百度

① 0302H ② 0203H ③ 0202H ④ 0303H

(64) 伪指令 DA1 DB 04H DUP(3 DUP(2),2 DUP(3))在数据区中能构成0203H操作数共有____百度

① 7个 ② 4个 ③ 3个 ④ 2个

(65) 设BUF1和BUF2均为变量名,操作数部分合法的指令是____百度

① ADD AL,BUF1*BUF2

② ADD AL,BUF1/BUF2

③ ADD AL,BUF1+BUF2

④ ADD AL,BUF2-BUF1

(66)
 MOV BL,80H
 MOV CL,2
 SAR BL,CL
上述指令序列执行后,结果是____百度

① (BL)=40H

② (BL)=20H

③ (BL)=0C0H

④ (BL)=0E0H

(67) 已知(SP)=1FFFH,执行下列指令后,(SP)=____
~~~
POPF
PUSH AX
~~~百度

① 2000H ② 2002H ③ 1FFCH ④ 1FFFH

(68)
NUM1 EQU 100
NUM2=64H
下面指令执行后,使BL中全为1的指令是____ 百度

① MOV BL,NUM1 EQ NUM2

② MOV BL,NUM1 LT NUM2

③ MOV BL,NUM1 NE NUM2

④ MOV BL,NUM1 GT NUM2

(69) 设(AL)=04H,(BL)=0F8H,执行MUL BL指令后,结果为____百度

① (AX)=03E0H

② (AX)=0FEE0H

③ (AX)=0032H

④ (AX)=00E0H

(70)
 ORG 100H
 NUM EQU 8042H
 DA1 DB 56H
 ~~~
 MOV BX,OFFSET DA1
上述程序段执行后BX中的值是____ 百度

① 56H ② 100H ③ 101H ④ 102H

(71) 设(AL)=63H (BL)=29H 执行下面指令后
 SUB AL,BL
 DAS
 AX的内容是____ 百度

① (AX)=0304H

② (AX)=0034 

③ (AX)=0034H

④ (AX)=0304

(72) 实现对AX中的带符号数除以2的指令是____百度

① IDIV 2

② SAR AX,1

③ ROR AX,1

④ SHR AX,1

(73)
 MOV AL,-1
 NEG AL
 XOR AL,65
上述程序段执行后,AL的内容是____百度

① 40H ② 64H ③ 01H ④ 61H

(74) 设数据段中定义语句
DA1 DB 12H,34H
DA2 DW 12H,34H
下面有语法错误的语句是____ 百度

① BUF1 DW DA1

② MOV DA1+1,AX

③ MOV BYTE PTR DA2+1,AL

④ MOV WORD PTR DA1,AX

(75)
 DA1 DW 2A05H
 DA2 DB 0FAH
 ~~~
 MOV AL,BYTE PTR DA1
 SUB DA2,AL
上述指令执行后,DA2中的内容是____ 百度

① 0DAH ② 0FAH ③ 0F5H ④ 0D0H

(76) 在执行POP [BX]指令,寻找目的操作数时,段地址和偏移地址分别是____百度

① 在DS和BX中 ② 在ES和BX中 ③ 在SS和BX中 ④ 在CS和BX中

(77) MOV AL,79
 ADD AL,0B1H
 执行上述指令后,标志位CF和OF的值是____百度

① (CF)=0,(OF)=0

② (CF)=0,(OF)=1

③ (CF)=1,(OF)=0

④ (CF)=1,(OF)=1

(78)
DA1 EQU WORD PTR DA2
DA2 DB 0ABH,0CDH
 ~~~
 SHL DA1,1
 SHR DA2,1
上述两条指令执行后,DA2中两字节单元内容分别是____ 百度

① 0ABH,0CDH ② 2BH,9BH ③ 4DH,57H ④ 56H,9BH

(79) TEST VAR,55H
JE ZER0
~~~
ZER0:……
上述程序段执行JE ZER0指令后能够产生分支的条件是____ 百度

① VAR=0

② VAR=55H 

③ VAR中第1,3,5,7位均为0

④ VAR中第0,2,4,6位均为0

(80) XOR AX,AX
 MOV AL,90H
 CWD
 执行上述指令后,结果为____百度

① (DX)=0000, (AX)=FF90H

② (DX)=FFFFH,(AX)=0090H

③ (DX)=FFFFH,(AX)=FF90H

④ (DX)=0000, (AX)=0090H

(81) 在程序采用DOS系统功能调用退出用户程序时,在使用INT 21H指令前,应选用____指令百度

① MOV AX,4CH

② MOV AL,4CH

③ MOV AH,4CH

④ RET

(82) 设(AH)=0,(AL)=6H,(BL)=9H, 执行下面指令:
 ADD AL,BL
 AAA
 之后,其结果是____百度

① (AH)=1,(AL)=5

② (AH)=0,(AL)=0FH

③ (AH)=1,(AL)=15

④ (AH)=0,(AL)=5

(83) STR1 DB ‘BeiJing 2009’
SCA DB ‘J’
~~~
LEA DI,STR1
MOV AL,SCA
MOV CX,0CH
CLD
REPNE SCASB
NEXT:……
程序运行到NEXT时 CX=____ ZF=____百度

① 8和1 ② 7和1 ③ 10和0 ④ 10和1

(84) VAR1 DW 1234H,89,255,-2,-0AH
VAR2 DB 34,78H,44,22,19,-12
 ~~~
 MOV AH,23H
 LEA BX,VAR1+4
 MOV AL,BYTE PTR [BX+1]
 MOV SI,WORD PTR VAR2+3
程序段执行后 AX=____ SI=____百度

① AX=23FEH SI=1317H

② AX=23FEH SI=1316H

③ AX=23FFH SI=1316H

④ AX=23FFH SI=1317H

试题解析:

调试结果为 AX = 2300H , SI = 1316H 选项中没有答案

(85) 测试BL的内容是否与数据5AH相等,若相等则转移到NEXT处,可实现的方法是____百度

①TEST BL,5AH
 JZ NEXT

②XOR BL,5AH
 JZ NEXT

③AND BL,5AH
 JZ NEXT

④OR BL,5AH
 JZ NEXT

(86) 使用DOS系统功能调用时,子程序编号(功能号)应先放入____寄存器中。百度

① AH ② AL ③ DL ④ AX

(87) 设(AL)=03H,能够完成将AL中的低4位代码变反,而其高4位代码不变的指令是____ 百度

① AND AL,0FH

② XOR AL,0FH

③ OR AL,0FH

④ SUB AL,0FH

(88) 下列指令能够使AX中的数据必为奇数的是____百度

① AND AX,0001H

② XOR AX,0001H

③ OR AX,0001H

④ ADD AX,0001H

(89) 下列指令中有语法错误的是____百度

① MOV CS,AX

② MOV DS,AX

③ MOV SS,AX

④ MOV ES,AX

(90) BUFF单元开始,连续存放了十个字节数据,欲找出与AL中内容不同的数,并将不同数据的地址偏移量送ADR单元,应选用的指令序列是____ 百度

①REPZ CMPSB
 JZ K1
 MOV ADR,DI
 K1: ……

②REPNZ CMPSB
 JZ K1
 MOV ADR,DI
 K1: ……

③REPZ SCASB
 JZ K1
 DEC DI
 MOV ADR,DI
 K1: ……

④REPNZ SCASB
 JNZ K1
 DEC DI
 MOV ADR,DI
 K1: ……

(91) 已知AX=0FFFFH,DX=0001H
 MOV CX,2
 LOP:SHL AX,1
 RCL DX,1
 LOOP LOP
上述程序段执行后DX=____ AX=____百度

① DX=0006H AX=0FFFDH

② DX=0006H AX=0FFFCH

③ DX=0007H AX=0FFFDH

④ DX=0007H AX=0FFFCH

试题解析:

assume cs:code

code segment
start:
    mov ax,0ffffh
    mov dx,0001h
    mov cx,2  ; 循环执行两次
lop:
    shl ax,1  ; 逻辑左移,进位放在cf

    rcl dx,1  ; 带进位的左环移,这里会 受到上面那条语句的影响
    ; 上面两条语句组合效果就是:把ax左边的最高一位放到dx的最低一位
    loop lop
    ; 第一次循环是
    ; ax = FFFE , E 就是 1110
    ; cf = 1
    ; dx = 0003 , 3 就是 0011
    ; 效果刚好就是把ax左边的最高一位放到dx的最低一位

    ; 第二次循环也一样
    ; ax = FFFC , C 就是 1100
    ; cf = 1
    ; dx = 0007 , 7 就是 0111

code ends

end start

(92) ARRAY DW 6,9,$+4,10H,$+4
~~~
 MOV AX,ARRAY+4
 设变量ARRAY的偏移量是0084H,上述指令执行后AX中的内容是____百度

① 0009H ② 008CH ③ 0090H ④ 0010H

(93) 已知AX=7865H,BX=89AAH
CLC
 ADD AX,BX
 OR BX,AX
 RCR AX,1
 RCL BX,1
 程序执行后,AX=____ BX=____ CF=____百度

① (AX)=0107H (BX)=175FH (CF)=1

② (AX)=0106H (BX)=175EH (CF)=1

③ (AX)=0107H (BX)=175EH (CF)=0

④ (AX)=0106H (BX)=175FH (CF)=0

(94) 设(SS)=338AH,(SP)=450H,执行 PUSH BX和 PUSHF两条指令后,堆栈顶部的物理地址是____ 百度

① 33CECH ② 33CF2H ③ 33CF4H ④ 33CE8H

(95) 不能表示存储单元逻辑地址是____百度

① 变量名 ② 标号名 ③ 段名 ④ 符号名

(96) VAY1 DW ?
 VAY2 EQU Byte PTR VAY1
 经过以上定义后,VAY1与VAY2之间的关系是____百度

① 段地址相同,偏移地址不同

② 段地址不同,偏移地址相同

③ 段地址不同,偏移地址不同

④ 段地址相同,偏移地址相同

(97) 不合法的变量类型是____百度

① 一字节 ② 二字节 ③ 三字节 ④ 四字节

(98) 在存储器中定义20个字长的数据缓冲区的伪指令是____百度

① Buffer EQU 20

② Buffer DW 20 DUP(?)

③ Buffer DW 20

④ Buffer DB 20 DUP(?)

(99) 下列操作中允许段超越前缀的是____百度

①取指令

②存目的串

③以BP为基址存取操作数

④堆栈操作

(100) 下面程序段是判断两个存储单元是否同为负数,若是,则AX置全1,否则AX置0
试在空白处各填上适当的条件转移指令(两空白处要利用不同的标志位选用不同的条件转移指令)。
VAR1 DW ××××
VAR2 DW ××××
~~~
MOV AX,VAR1
MOV BX,VAR2
XOR AX,BX
 ________
 TEST BX,8000H
 ________
 MOV AX,0FFFFH
NEXT:MOV AX,0
~~~百度

①JNS NEXT
 JE NEXT

②JS NEXT
 JE NEXT

③JC NEXT
 JZ NEXT

④JNC NEXT
 JNZ NEXT

(101)
 VARY1 EQU BYTE PTR VARY2
 VARY2 DW 0ABCDH
 ~~~
 SHL VARY1,1
 SHR VARY2,1
 上述两条指令执行后,VARY2字存储单元内容是____百度

① 0ABCDH ② 0BCDEH ③ 55CDH ④ 0AB55H

(102)
 DEC2 DB ‘56’
 ~~~
 XOR DI,DI
 MOV BL,DEC2[DI+1]
 AND BL,0FH
 MOV AL,DEC2[DI]
 AND AL,0FH
 MOV DL,10
MUL DL
ADD AL,BL
上述程序段执行后,AL=____ BL=____ 百度

① AL=56 BL=7

② AL=55 BL=6

③ AL=56 BL=6

④ AL=55 BL=7

(103) 设(SP)=0028H,执行段内返回指令RET 6后,SP的内容是____ 百度

① 0036H ② 0022H ③ 0030H ④ 0020H

试题解析:

ret 6 相当于下面两条指令
pop ip
add sp,6

(104) 汇编语言语句格式中,根据对符号名的规定,错误的解释是____百度

①名字的第一个字符只可以是大小写英文字母及?、@、_等

②名字的第一个字符可以是数字

③名字的有效长度≤31个字符

④名字的最后一个字符可以是数字

(105) 下列语句中能实现留空8个字节单元的语句是____百度

① DATA1 DT ?

② DATA2 DW ?

③ DATA3 DD ?

④ DATA4 DQ ?

(106) 已知AX=0078H,BX=0408H
 SHR BX,1
 AND BX,0F0FH
 MOV CX,4
LOP:XCHG BH,BL
DIV BL
SAL AX,1
LOOP LOP
上述程序段执行后,AX=____ BX=____百度

① 30和0402H

② 30和 0204H 

③ 35和0400H

④ 35和 0400H

(107) yeqianyi DW 10H DUP(3 DUP(2,50),3,5)
 上述语句汇编后,为变量yeqianyi分配的存储单元字节数是____百度

① 80H ② 100H ③ 50H ④ 124H

(108) 在汇编语言源程序中,每个语句可以由四项组成,如语句要完成一定功能,那么该语句中不可省略的项是____百度

① 名字项 ② 操作项 ③ 操作数项 ④ 注释项

(109) 在汇编语言源程序中,对END语句的叙述正确的是____百度

① END语句是一可执行语句

② END语句表示程序执行到此结束

③ END语句表示源程序到此结束

④ END语句在汇编后产生机器代码

(110) 设数据段中有:
 DATA1 DB 10H,00H
 DATA2 DW 20H,30H
 在下面指令中,使用变量有错误的是____百度

① MOV DATA1,AX

② MOV BYTE PTR DATA2,AL

③ ARRD DW DATA1

④ MOV WORD PTR DATA1,AX

(111) 下面对伪指令语句的说明,正确的是____百度

①汇编程序将伪指令翻译成机器代码。

②伪指令在执行时完成其功能。

③伪指令的功能是指示、引导汇编程序在汇编过程中所完成的不同操作。

④当汇编结束后,目标程序中仍保留伪指令。

(112) 条件转移指令JNBE 产生转移的条件是____ 百度

① CF=0 AND ZF=0

② CF=0 AND ZF=1

③ CF=1 AND ZF=0

④ CF=1 AND ZF=1

试题解析:

参考 http://blog.eonew.cn/archives/254

(113) 设定义BUF DW 100 DUP(0),则指令“MOV CX,SIZE BUF”的等效指令是____百度

① MOV CX,100

② MOV CX,200

③ MOV CX,400

④ MOV CX,100 DUP(0)

(114)
AR1 DB‘ABCDEFGH’
AR2 DB O
~~~
MOV AH,1
INT 21H
AND AL,0FH
DEC AL
LEA BX,AR1
XLAT 
MOV AR2,AL
假设键盘输入数字4,则执行后(AR2)=____; 执行后CF=____百度

① 44H(或‘D’),0

② 43H(或‘C’),1 

③ 44H(或‘D’),1

④ 43H(或‘C’),0

(115)
 ADR DW 1234H,5678H
 ~~~
 LEA SI,ADR
 LDS BX,ADR
 设变量ADR的偏移地址是100H,上述两条指令执行后:SI=____,DS=____ 百度

① 100H 和1234H

② 100H 和5678H

③ 000H 和1234H

④ 000H和5678H

(116)
 NUMBER EQU 81H
 DATA DB 49H
 ~~~
 XOR DATA,NUMBER
 上述语句执行后DATA中的内容是____百度

① 81H ② 49H ③ C8H ④ 89H

(117) 现有一数据定义伪指令在DA单元定义一数据:
 DA DW 0123H
 能与上述语句等效的语句是____百度

① MOV WORD PTR DA,‘123H’

② MOV DA,123H

③ MOV Byte PTR DA,0123H

④ MOV DA,‘123H’

(118)
 DATA SEGMENT
 DA1 DB 64H DUP(?)
 DA2 DW 0100H,0200H
 DA3 DW DA2
 ~~~
 MOV SI,DA3
 上述指令执行后,SI中的内容是____百度

① 100H ② 200H ③ 100 ④ 300H

(119)
 DATA SEGMENT
A DW 0
B DW 0
C DW 230,20,54
DATA ENDS

MOV BX,OFFSET C
MOV AX,[BX]
MOV B,AX
MOV AX,[BX+2]
ADD AX,B
MOV A,AX
上述程序运行后,A单元的内容是____ ,B单元的内容是____ 百度

① 250 230

② 284 250

③ 220 290

④ 300 250

(120) 一数据段定义如下:
 DATA SEGMENT
 ORG 0134H
 DA DB 12H,63,26H
 ARRD DW DA
 DATA ENDS
 能够使BX中的数据为奇数的语句是____百度

① MOV BX,ARRD

② MOV BL,DA+2

③ MOV BX,WORD PTR DA

④ MOV BX,DA+1

(121) 已知DX=0A476H, CX=0203H, CF=1
 OR DX,DX
 RCR DX,CL
 XCHG CH,CL
 RCL DX,CL
 上述程序段执行后DX=____ CF=____百度

① 523BH 和1 ② 523BH和0 ③ 423CH 和1 ④ 423CH 和0

试题解析:

or 指令会影响CF标志位

(122) 在同一程序段中,定义下面伪指令,错误的是____ 百度

① PORT1 EQU AL

② PORT2=AL 

③ PORT2=2A50H AND 0FFH

④ PORT3 EQU 2A50H

试题解析:

报错情况:
error A2026: constant expected

(123) 设ADRT=100H,不符合语法规则的语句是____ 百度

① MOV AX,ADRT

② MOV AX,[ADRT+SI]

③ MOV [ADRT],AX

④ MOV ADRT[SI],AX
  PORT3 EQU 2A50H AND 0FFH

(124) 指出下面哪组伪指令使用是错误的 百度

①DAT Segment
 ~~~
 DAT Ends 

②Extra Segment
 ~~~
 Extra Ends 

③Stack Segment
 ~~~
 Stack Ends 

④Cod Segment
 ~~~
 Cod Ends

试题解析:

四个选项都能过编译,没有正确答案

(125)
 MOV AX,8
 SHL AX,1
 SHL AX,1
 MOV BX,AX
 MOV CL,2
 SHL AX,CL
 ADD AX,BX
上述程序段执行后,BX=____ AX=____ 百度

① 0020H 和 00A0H

② 0028H和 00A0H 

③ 0028H 和 00C8H

④ 0020H和 00C8H

(126)
ARRAY DW 10 DUP(2)
 XOR AX,AX
 MOV CX,LENGTH ARRAY
 MOV SI,SIZE ARRAY-TYPE ARRAY
NEXT: ADD AX,ARRAY[SI]
 SUB SI,TYPE ARRAY
 LOOP NEXT
 上述程序执行后,(AX)=____ ,(SI)=____ 百度

① 40 -2

② 40 -3

③ 20 -3

④ 20 -2

(127)
BUF DB 0DH
 ~~~ 
 MOV AL,BUF
 CALL FAR PTR SUBR
 ~~~
 SUBR PROC FAR
 CMP AL,10
 JC A1
 ADD AL,7
 A1: ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
RET
 SUBR ENDP 
 程序执行后,DL=____ ,屏幕上显示输出的字符是____ 百度

① 43H C

②44H D

③ 45H E

④ 46H F

三、程序填空

(1) 在以 BCD 为首地址的字节单元中存放了 3个压缩 BCD 码 x 、 y 、 z 本程序用以计算 x+y-z,并将结果存放在 SS 字节单元中。试在程序的空格处填入适当的指令。

BCD DB x, y , z
SS  DB ?
    ~~~
    MOV AL, BCD
    ADD AL, BCD+1
    DAA
    SUB AL, BCD+2
    DAS
    MOV SS, AL

(2)

DA1 DB '01234'
DA2 DB 5 DUP(0)
    ~~~
    MOV SI,0
    MOV CX,5
LOP: 
    MOV AL,DA1[SI]
    ADD AL,11H
    OR AL,01H
    MOV DA2[SI],AL
    INC SI
    LOOP LOP

试问 : (1) 程序段执行后, DA2各字节中的数据是 41H,43H,43H,45H,45H
(2) 程序中 MOV AL, DA1[SI]指令的源操作数寻址方式是 寄存器相对寻址

(3) 下面程序段用以统计 AX 中为“ 0”的位数,统计结果放在 CONT 单元中,试在程序 段的空格处填上缺少的指令。

    MOV CONT, 0
    MOV CX, 16
NEXT:
    SHR AX, 1
    JC DONE
    INC CONT
DONE:
    DCE CX
    JNZ NEXT

(4) 下面程序段用以统计 SUM 字单元中含有多少个 “ 5” 统计结果存放在 AL 中, 试在程 序段的空格处填上缺少的指令。

    XOR AX, AX
NEXT: 
    CMP SUM, 5
    JL DONE
    SUB SUM,5
    INC AL
    JMP NEXT
DONE:
    ~~~

(5) 在主程序中,采用调用子程序方式求一个字数组中的元素之和,并将之送入 SUM 单 元。试在下面程序段中填补上空缺的指令。

    ~~~
    MOV BX, OFFSET ARRAY
    MOV CX,NN
    CALL yeqianyi
    ~~~
yeqianyi PROC
    PUSH AX
    XOR AX,AX
NEXT: 
    ADD AX,[BX]
    ADD BX,2
    LOOP NEXT
    MOV SUM,AX
    POP AX
    RET
yeqianyi ENDP

(6) 在主程序中, 采用调用子程序方式将一组非压缩 BCD 在屏幕上显示出来。 试在下面 程序段中填补上空缺的指令。

    ~~~
    MOV BX,OFFSET feiyabcd
    MOV CX,NN
    CALL DISPLAY
    ~~~
DISPLAY PROC
    PUSH DX
LOP: 
    MOV DL,[BX]
    ADD DL,30H
    MOV AH,02H
    INT 21H
    INC BX
    LOOP LOP
    RET
DISPLAY ENDP

(7)

BUF DW 1, 0, 0AB1CH , 582H , 9, 3A04H , 9, 0
    ~~~
    LEA DI, BUF
    MOV CX, 8
    MOV AX, 9
    CLD
    REPNZ SCASW
    JNZ K1
    SUB DI, OFFSET BUF
    MOV DX, DI
    SHR DX, 1
    ADD DL, 30H
    MOV AH, 2
    INT 21H
K1: ...

上述程序执行后程序完成的功能是 在 BUF 中找出第一次出现 9的元 素 ,显示输出的值是 5

(8) 在以 String 为首地址的内存区域存放了一个字符串 , 下面程序段的功能是实现将该 串中所有字母字符依次送入 BUFF 缓冲区 , 试在程序中填补上空缺的指令。

String DB '123ABC051AF......049ADVWS'
N EQU $- String
BUFF DB N DUP(?)
    ~~~
    MOV CX,N
    MOV BX,0
    MOV SI,0
yeqianyi: 
    CMP String[BX], 'A'
    JB NEXT
    CMP String[BX], 'Z'
    JA NEXT
    MOV AL,String[BX]
    MOV BUFF[SI],AL
    INC SI
NEXT: 
    INC BX
    LOOP yeqianyi
    HLT

(9) 下面程序段是将 BUFF 单元的绝对值送入 DAR 单元 , 请将空白处各填上一条指令。

    BUFF DW ××××
    DAR DW ?
    ~~~
    MOV AX, BUFF
    TEST AX,8000H
    JZ NEXT
    NEG AX
NEXT: 
    MOV DAR,AX

(10) 下面程序段完成将字节储存单元 BUF 中的两个压缩 BCD码 拆成俩个非压缩 BCD码 后分别存放在 BCD1 和 BCD2 字节单元中。

BUF DB XXH
BCD1 DB ?
BCD2 DB ?
    ~~~
START:
    MOV AL,BUF
    MOV BL,AL
    MOV CL,4
    SHR AL,CL
    MOV BCD1,AL
    AND BL,0FH
    MOV BCD2,BL
    HLT

四、编程题

(1) 编一程序段将BUF字节单元中的数拆成高低四位,并且将分离出的高四位和低四位分别放于BUF+1和BUF+2字节单元的低四位上。

答案:

ASSUME CS:CODE,DS:DATA

DATA SEGMENT
    BUF DB 34H,?,?
DATA ENDS
CODE SEGMENT

START:
    MOV AX,DATA
    MOV DS,AX
    MOV AL,BUF
    MOV CL,4
    SHR AL,CL
    MOV BUF+1,AL
    MOV AL,BUF
    AND AL,0FH
    MOV BUF+2,AL
    MOV AH,4CH
    INT 21H
CODE ENDS

END START

(2) 编制一子程序,将AL中一位十六进制数转换为对应的ASCII码并用2号DOS功能调用显示出来,输入参数:被转换的十六进制数已在AL中。

答案:

CODE SEGMENT
    ASSUME CS:CODE
START:
    MOV AL,0DH
    CALL Liuweipei
    MOV AH,4CH
    INT 21H

Liuweipei PROC
    CMP AL,10
    JC K1
    ADD AL,7
K1:  ADD AL,30H
    MOV DL,AL
    MOV AH,2
    INT 21H
    RET
Liuweipei ENDP
CODE ENDS

END START

(3) 试编制一程序,把X和Y单元中的无符号字节数的较大者存入BIG单元,较小者存入MIN单元,若X=Y,则把其中之一存入BIG中。(只需写出有关的指令序列)

答案:

    MOV AL,X
    MOV  BL,Y
    CMP AL,BL
    JAE EXIT
    XCHG AL,BL
EXIT:
    MOV BIG,AL
    MOV MIN,BL

(4) 用字符串指令编制一程序段,把以DAT1为首地址的数据区中的50个字节数据依次传送到以DAT2为首地址的数据区中。要求:在程序中按地址递增方式进行数据传送。

答案:

    CLD
    MOV CX,50
    LEA SI,DAT1
    LEA DI,DAT2
    REP MOVSB

(5) 在以Block为首地址的字节单元中,存放了10计算机(1)班的学生考试成绩。试编制一程序,利用学生的序号来查表得到该学生的成绩,设学生的序号在NUMBER单元,查表结果存入RESULT单元中。

答案:

DATA  SEGMENT 
Block   DB  X1, X2, X3,……,X50
NUMBER  DB  X
RESULT  DB  ?
DATA  ENDS

CODE  SEGMENT
ASSUME  CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    LEA BX, Block
    MOV AL, NUMBER
    XLAT
    MOV RESULT, AL
    MOV AH,4CH
    INT 21H
CODE  ENDS
END  START

(6) 在南昌市的湖坊乡,约有人口45000 ,试编写一程序统计一下该乡超过100岁以上的老人有多少,并将统计结果存放在SUM单元中。

答案:

DATA  SEGMENT
    AGE   DB  25,31,6,101,90,71,116, …
    CONT  EQU $-AGE
    SUM   DB  ?
DATA  ENDS

CODE  SEGMENT
ASSUME  CS:CODE,DS:DATA
START:
    MOV  AX,DATA
    MOV  DS,AX
    MOV  CX,CONT
    MOV  BX,0
LOP:
    CMP  AGE[BX],100
    JB  NEXT
    INC  SUM
NEXT:
    INC  BX 
    LOOP  LOP
    MOV  AH,4CH
    INT  21H
CODE ENDS

END  START

(7) 设有DX:AX构成一个32位数据,从AX的低位(第0位)开始,逐位向高位和DX置1,置1的个数由CX的内容确定( 已知 CX<32 )。试编制一程序段,实现上述要求。

答案:

    XOR AX,AX
    XOR DX,DX
LOP:
    STC
    RCL AX,1
    RCL DX,1
    LOOP LOP

(8) 编写程序段,用DOS的1号功能调用通过键盘输入一字符,并判断输入的字符。如字符是“Y”,则转向YES程序段;如字符是“N”,则转向NO程序段; 如果是其它字符,则转向DOS功能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序列)

答案:

    ;(YES和NO分别是两程序段入口处的标号)
KEY:
    MOV AH,1
    INT 21H
    CMP AL,‘Y’
    JE YES
    CMP AL,‘N’
    JE NO
    JMP KEY

(9) 试编写一程序段,在CHAR为首地址的26个字节单元中依次存放字母‘A’~‘Z’

答案:

CHAR  DB  26 DUP(?)

START:
    LEA  BX,CHAR
    MOV  AL,'A'
    MOV  CX,26
LOP1:
    MOV  [BX],AL
    INC  AL
    INC  BX
    LOOP  LOP1
    HLT

(10) 在以STRING为首地址的存储区域存放了一个字符串,串的长度为50,查找其中是否有字符$,若有将SIGN单元置1,反之, 将SIGN单元置0(只需写出有关的指令序列)
(1) 用比较条件转移指令实现。
(2) 用重复操作前缀串搜索指令实现。

答案:

;(1)
    MOV  CX,50
    MOV  BX,0
N:
    CMP STRING[BX],’$’
    JZ DONE
    INC  BX
    LOOP N
    MOV  SIGN,0
    JMP  EXIT0
DONE:
    MOV  SIGN,1
EXIT0:
    HLT
;(2)
    MOV  CX,50
    LEA DI,STRING
    CLD
    MOV AL,'$'
    REPNE SCASB
    JZ DONE
    MOV SIGN,0
    JMP EXIT0
DONE:
    MOV SIGN,1
EXIT0:
    HLT

(11) 从键盘接收一个4位十进制数据,并将其存入ASCII缓冲区,若输入出错, 则调用子程序输出出错信息,提示重新输入,试编写一程序完成上述功能。

答案:

DATA  SEGMENT
    ASCII  DB 4 DUP(?)                            
    SIGN   DB ‘Input  error,Repeat! $’
DATA  ENDS

CODE  SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV  AX,DATA
    MOV  DS,AX
    LEA  SI,ASCII
    MOV  CX,4
NEXT:
    MOV  AH,01H
    INT  21H
    CMP  AL,30H
    JB  DONE
    CMP  AL,39H
    JA  DONE
    MOV  [SI],AL
    INC  SI
    LOOP  NEXT
    MOV  AH,4CH
    INT  21H
DONE:
    CALL  OUTPUT
    JMP  NEXT

OUTPUT  PROC
    PUSH  CX
    LEA  DX,SIGN
    MOV  AH,09H
    INT  21H
    POP  CX
    RET
OUTPUT  ENDP

CODE ENDS

END  START

(12) 编写一完整源程序,将M1中的二进制数按位倒排送M2中,即M1第0位送M2第7位,M1第1位送M2第6位,依次类推。c 数据段如下:
DATA SEGMENT
M1 DB YY;任一字节数
M2 DB ?
DATA ENDS

答案:

DATA  SEGMENT
    M1  DB  ××
    M2  DB  ?
DATA  ENDS

CODE  SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV  AX,DATA
    MOV  DS,AX
    MOV  CX,8
    MOV  AL,M1
    XOR  AH,AH
LOP:
    SAL  AL,1
    RCR  AH,1
    LOOP LOP
    MOV  M2,AH
    MOV  AH,4CH
    INT  21H
CODE  ENDS

END  START

(13) 在数据段中,WEEK是星期一~星期日的英文缩写,DAY单元中有数1~7(1 表示星期一,7表示星期日):
WEEK DB ‘MON’, ‘TUE’, ‘WED’, ‘THU’, ‘FRI’, ‘SAT’, ‘SUN’
DAY DB X ; 数字1~7
试编写一源程序,根据DAY的内容用单个字符显示功能调用(2号功能)去显示对应的英文缩写。

答案:

DATA  SEGMENT
    WEEK  DB  'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'
    DAY   DB  X
DATA  ENDS

CODE  SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV  AX,DATA
    MOV  DS,AX
    XOR  BX,BX
    MOV  BL,DAY
    DEC  BL
    MOV  AL,BL
    SAL  BL,1
    ADD  BL,AL
    MOV  CX,3
    LOP:  MOV  DL,WEEK[BX]
    MOV  AH,02H
    INT  21H
    INC  BX
    LOOP  LOP
    MOV  AH,4CH
    INT  21H
CODE ENDS

END  START

(14) 试编制一程序段,用串操作指令STOSB实现向DA数据区依次相间存放字母字符A,B, C,……J和数字字符0~9,相间顺序是:A,0,B,1,C,2,…,I,8,J,9(设DA数据区所在段已由ES指向)

答案:

    MOV  AL,'A'
    MOV  AH,'0'
    LEA  DI,DA
    MOV  CX,20
    CLD
LOP:
    STOSB
    INC  AL
    XCHG  AL,AH
    LOOP  LOP

(15) 编写程序,将一个包含有8个数据的数组M分成两个数组:非负数数组P和负数数组N,并分别将非负数的个数及负数的个数显示出来。 请编写完整源程序。数据段定义如下:

DATA  SEGMENT
    M  DB  12,-34,11,45,-12,…
    P  DB  8 DUP(?)
    N  DB  8 DUP(?)
    PCOUNT  DB  0
    NCOUNT  DB  0
DATA  ENDS

答案:

DATA  SEGMENT
    M  DB  12,-34,11,45,-12,…
    P  DB  8 DUP(?)
    N  DB  8 DUP(?)
    PCOUNT  DB  0
    NCOUNT  DB  0
DATA  ENDS

CODE  SEGMENT
    ASSUME  CS:CODE,DS:DATA
START:
    MOV  AX,DATA
    MOV DS,AX
    MOV  CX,8
    MOV  SI,0
    MOV  DI,0
    MOV  BX,0
NEXT:
    MOV  AL,M[BX]
    CMP  AL,0
    JGE  PP
    MOV  N[DI],AL
    INC  DI
    INC  NCOUNT
    JMP  DONE
PP:
    MOV  P[SI],AL
    INC  SI
    INC  PCOUNT
DONE:
    INC  BX
    LOOP  NEXT
    MOV  DL,PCOUNT
    ADD  DL,30H
    MOV  AH,2
    INT  21H
    MOV  DL,NCOUNT
    ADD  DL,30H
    MOV AH,2
    INT  21H
    MOV  AH,4CH
    INT  21H
CODE ENDS

END  START

(16) 在首地址为TAB的数组中按递增次序存放着100个数,试编程将出现次数最多的数以及出现的次数分别存放于变量NUM和COUNT中, 并以: COUNT=? 的形式输出COUNT的值(设最多重复次数<10)

答案:

DATA SEGMENT
    BUF DB 1,2,14H,14H,14H,14H,14H,15H,15H,15H,15H,59H
    LEN =$-BUF
    NUM DB ?
    COUNT DB 0
    MM DB 'COUNT=','$'
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    MOV SI,0
    MOV CX,LEN
    MOV BL,0
A:
    MOV AL,BUF[SI]
    CMP AL,BUF[SI+1]
    JNE KL1
    INC BL
    MOV BH,AL
    JMP KL2
KL1:
    CMP COUNT,BL
    JAE L2
    MOV COUNT,BL
    MOV NUM,BH
L2:
    MOV BL,0
KL2:
    INC SI
    LOOP A
    INC COUNT
    LEA DX,MM
    MOV AH,9
    INT 21H
    MOV DL,COUNT
    ADD DL,30H
    MOV AH,2
    INT 21H
    MOV AH,4CH
    INT 21H
CODE ENDS

END START

(17) 已知宏指令为(自测题一简答题的第4小题):
SHIFT MACRO RR,COUNT
MOV AX,COUNT
IF RR LE 64
MOV CL,3
SHR AX,CL
IF RR LT 16
MOV CL,6
SHR AX,CL
ENDIF
ENDIF
ENDM
宏调用为:SHIFT 15,7FFFH
SHIFT 80,9FFFH
写出宏展开后的等效源程序段(写在右边!)。

答案:

;宏展开为:
    MOV AX,7FFFH
    MOV CL,3
    SHR AX,CL
    MOV CL,6
    SHR AX,CL
    MOV AX,9FFFH

试题解析:

EQ 检测两个数是否相等
NE 检测两个数是否不相等
GT 检测左边的数是否大于右边的
LT 检测左边的数是否小于右边的
GE 检测左边的数是否大于等于右边的
LE 检测左边的数是否小于等于右边的

(18) 已知三个带符号的字节数据a,b,c存放在yeqianyi开始的连续单元中,若a,b,c同时为正数则FLAG单元置0, 若同时为负数,则FLAG单元置1,否则FLAG单元置全1,请编写完整源程序。

答案:

DATA  SEGMENT
    yeqianyi  DB  a,b,c
    FLAG      DB  ?
DATA  ENDS

CODE  SEGMENT
    ASSUME  CS:CODE,DS:DATA
START:
    MOV  AX,DATA
    MOV  DS,AX
    MOV  DX,0
    LEA  BX, yeqianyi
    MOV  CX,3
LOP:
    ;0既不是正数也不是负数,答案有点问题
    ;如果题目改成负数与非负数时答案才正确
    MOV  AL,[BX]
    TEST  AL,80H
    JZ  K1
    ADD  DH,1
    JMP  K2
K1:
    ADD  DL,1
K2:
    INC  BX
    LOOP  LOP
    CMP  DL,3
    JZ  K3
    CMP  DH,3
    JZ  K4
    JMP  K5
K3:
    MOV  FLAG,0
    JMP  K6
K4:
    MOV  FLAG,1
    JMP  K6
K5:
    MOV  FLAG,0FFH
K6:
    MOV  AH,4CH
    INT  21H
CODE  ENDS

END  START

(19) 5.25改编(汇编语言第4版): 从键盘输入一个字符串, 然后将其中的大小写互换显示。显示字符串的功能调用采用宏,大小写互换写成子程序。

答案:

dispsage macro msg
    local next
    mov bx,offset msg+2
    mov cl,msg[1]
next:
    mov dl,[bx]
    mov ah,2
    int 21h
    inc bx
    dec cl
    jnz next
endm
dispmssage  macro  mssage
    mov dx,offset mssage
    mov ah,9
    int 21h
    endm
.model small
.stack
.data
msg1       db 'Please enter a string:',0dh,0ah,'$'
string     db 10,0, 10 dup(?)
string3    db 10 dup(?), 0dh,0ah,'$'
str        db      13,10,'$'
.code
.startup
dispmssage msg1
    mov dx,offset string
    mov ah,0ah
    int 21h
    dispmssage str
    call dxhh
    dispmssage string3
.exit 0

dxhh proc
    mov si,offset string+2
    mov cl,string[1]
    mov di,offset string3
next1:
    mov al,[si]
    cmp al,'A'
    jb next2
    cmp al,'Z'
    ja next3
    add al,20h
next2:
    mov [di],al
    inc si
    inc di
    dec cl
    jnz next1
    jmp next5
next3:
    cmp al,'a'
    jb next4
    cmp al,'z'
    ja next4
    sub al,20h
next4:
    mov [di],al
    inc si
    inc di
    dec cl
    jnz  next1
next5:
    ret
dxhh endp
END

(20) 在Visual C环境下利用嵌入式汇编指令,完成对两个C变量的求和,结果由C程序显示。

答案:

#include "stdio.h"

main()
{
    int sum;
    int var1=5;
    int var2=6;
    _asm{
        mov eax,var1
        add eax,var2
        mov sum,eax
    }
    printf("%d\n",sum);
}