⑺ 对 ⑻ 错,输出指令的地址若是16位,必须用DX间址。
5. 下列程序段执行后 AX=?
设数据段有: TABLE DW 100,200,300,400 ENTRY DW 3 代码段 对DS初始化 MOV BX,OFFSET TABLE MOV SI,ENTRY MOV AX,[BX+SI] 执行后 AX=2C00
6. 将AL中的8位二进制数按倒序方式重新排列,即AL原来为D7D6…D0,倒序后AL=D0D1…D7。
参考答案 …
MOV CX, 8
L: SHL AL, 1 RCR BL, 1 LOOP L MOV AL, BL …
7.若起始地址偏移量为2000H的内存单元存放有100个ASCII码字符,现给这些字符添加奇偶校验位(bit7),使每个字符中“1”的个数为偶数,在顺序输出到地址为100H的端口。
解答 MOV SI, 2000H MOV CX, 100 MOV DX, 100H NEXT2: MOV AL, [SI] ;取字符串中字符送AL AND AL, 0FFH ;改变标志位 JPE NEXT1 ;“1”的个数为偶,bit7不变 OR AL, 80H ;“1”的个数为奇,bit7变为1 NEXT1: OUT DX, AL INC SI LOOP NEXT2 MOV AH, 4CH INT 21H
8. 若SS=1000H,SP=2000H,AX=1234H,BX=5678H,FR=2115,试说明执行指令 PUSH AX PUSH BX PUSHF 5
POP CX POP DX
之后,SP=? SS=? CX=? DX=? 并画图指出堆栈中各单元的内容。
解答: SS=1000H
SP=1FFEH CX=2115H DX=5678H 栈中各单元内容如下所示:
地址 RAM 11FFAH 2115 11FFCH 5678 11FFEH 1234 12000H
第4章 宏汇编语言
习题与思考题
1.画出以下变量在内存中存储的示意图。 D1 DB ‘A’,’123’,09H, 45 D2 DW ‘A’,’CD’,23H, 4567H D3 DD 1234H, 23456789H
2.设计子程序分别完成以下功能:
1)根据给定的参数值,判断该参数是偶数还是奇数。 2)把给定参数值的高、低数据位互换。
3.设计相应的宏完成以下功能: 1)把给定的参数按二进制显示。
2)求两个参数的和,并按十进制形式显示。 6
第5章 汇编语言程序设计
习题与思考题
1. 设数据段中有字节型单元NUMBER和FLAG,判断NUMBER与给定的X和Y的大小关系(X 解答:.486 Data segment NUMBER db ? FLAG db ? Data ends Code segment     Assume cs: Code, ds: Data Beg: mov ax,data       Mov ds,ax  mov al, X     Mov bl, Y      Cmp NUMBER, X     Jnc P1      Mov FLAG, 0FFH     Jmp exit  P1:  cmp NUMBER, Y     Ja P2      Mov FLAG, 00H     Jmp exit  P2:  mov FLAG, 01H Exit: mov ah, 4ch      Int 21h Code ends      End Beg   2. 计算1+2+3+…+100,并把和保存在SUM单元中。 .486  DATA  SEGMENT  USE16  TT         DB   1 SUM       DW   ? DATA  ENDS  7  CODE  SEGMENT  USE16         ASSUME  CS:CODE,DS:DATA BEG:     MOV  AX ,  DATA             MOV  DS,   AX             MOV  CX,   100             MOV  AX,   0 START:   ADD  AX,   TT             INC    TT  LOOP  START MOV  SUM,  AX MOV  AH,    4CH MOV  21H  CODE  ENDS  END   BEG    3. 对一个给定的N数据,用冒泡排序法进行排序。 解答:.486 Data segment  Buf db ‘abcd18437hj’ Lens equ $-buf Count db lens Flag db ? Data ends Code segment       Assume cs: code, ds: data Beg: mov ax, data     Mov ds, ax Again: dec count       Jz done       Mov flag, 0       Mov cx, count       Mov si, offset buf  Last: mov al, [si]       Mov ah, [si+1]       Cmp ah, al       Jnc next       Mov [si], ah       Mv [si+1], al       Mov flag, 1 8