注册 登录
编程论坛 汇编论坛

有几道题目帮我看看

a261935348 发布于 2012-05-27 15:26, 668 次点击
1.

MOV AX,9876H

MONBX,7FFFH

CMP AX,BX

JNO LOP

MOV DX,-1

JMP DONE

LOP:MOV DX,0

DONE:INT 3

 

AX__,BX=__,DX=__,OF=__        9876H 7FFFH FFFFH 1

OF为什么是1? 不太明白

 

2.

MOV AH,0

MOV AL,X

ADD AL,Y

DAA

ADC AH,0

MOV Z ,AL

INT3

X DB 88H

Y DB 76H

Z DB?

 

AH=__,AL=__,CF=__Z单元的值=__   

这题的CF为什么是0,88H+76H不是超了么?

 

3.

OPE1 DB 2,3

OPE2 DW 3345H,6799H

 

MOV AL,OPE1

MOV BX,OPE2+1

SUB BL,AL

结果:(AL)=__ (BX)=__  

答案 02H ,9931H很不明白这个9931H是怎么算出来的!

 

4.

BUF DW 2152H,3416H,5731H,4684H

  MOV BX,OFFSET BUF

  MOV AL,3

  XLAT

  MOV CL,AL

  MOV AL ,6

  XLAT

  INT 3

结果(CL)=34H    (AL)=84H

不太明白他怎么算出来的!题目有点多 懂的帮帮忙!
10 回复
#2
于祥2012-05-27 16:52
1.
CMP AX,BX  该指令中:
 对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将         
 OPRD1-OPRD2的结果送回OPRD1,而只是比较.因而不改变OPRD1和OPRD2的内容,该
 指令用于改变标志位.
 两相无符号数比较:
              若(DX)>=(CX)时,则CF=0,即无借位.
              若(DX)<(CX)时,则CF=1.
 两个带符号数比较
              对带符号数判断大小可通过溢出标志OF及符号标志SF共同判断.
              当 OF=0,即无溢出时,若SF=0,则(DX)>(CX)
                                 若SF=1,则(DX)<(CX)
              当 OF=1,即有溢出时,若SF=1,则(DX)>(CX)
                                 若SF=0,则(DX)<(CX)
 
#3
于祥2012-05-27 17:11
2.
这题的CF为什么是0,88H+76H不是超了么?
 
你确定超越了?用双高位法判断一下。
3.

我在编译器中看到的结果是:
MOV AL,OPE1这条语句传给ax中的值是8102
MOV BX,OPE2+1这里bx中的值为9933
自然得出bx中的值为9931
但是我不知道怎么得到的,不好意思
4.
查表指令 XLAT

 格式: XLAT TABLE其中TABLE为一待查表格的首地址.
 ----

 功能: 把待查表格的一个字节内容送到AL累加器中.
 ----
说明: 1. 在执行该指令前,应将TABLE先送至BX寄存器中,然后将待查字节与在表格中距表  ----     首地址位移量送AL,即 (AL)<--((BX)+(AL)).

       2. 本指令不影响状态标位,表格长度不超过256字节.

看完这个就能理解这个题了!

 
#4
有容就大2012-05-27 18:14
说说我的理解 看对不对
1  CMP AX,BX  通过AX - BX 来确定OF 但不改变 AX, BX的值 9876H - 7FFFH 的结果是 1877H OF在下标11对应的位置
   刚好是 1.

2  88H+76H后AL = FEH 之后DAA AL = 64H CF = 1, 这里有个问题我也不清楚 就是 ADC AH 0 是把CF 也加到 AH里
   是不是执行这个操作后 CF就清零了。 所以你的答案是 CF = 0.貌似你的答案都不会出错。

3  OPE2 DW 3345H,6799H后 在内存的存放是这么的  45H
                                               33H
                                               99H
                                               67H
然后MOV BX,OPE2+1 偏移量+1只移动一个字节 所以指向的是 33H 也就是说把 33H 低位 99H 高位 传给BX 。所以
BX = 9933H 在 - 0002H 自然得到 9931H

4 BUF DW 2152H,3416H,5731H,4684H后 内存分布如同 3 题
---
程序代码:
MOV AL,3

  XLAT

后 是把BUF连续内存下标位3的那个存储单元送个AL 正好是 34H  MOV CL,AL 后 CL = 34H
--
程序代码:
  MOV AL ,6

  XLAT

BUF连续内存下标为6的正好是84H 你可以画下BUF的分布图。










 

#5
于祥2012-05-27 18:23
回复 4楼 有容就大
ax中可不是0002H,al是02H,ah不确定滴!嘿嘿
#6
有容就大2012-05-27 18:27
回复 5楼 于祥
嗯AH是不确定 我疏忽了 不过他的程序是 SUB BL,AL 和AH没关系 还是9931H。

#7
于祥2012-05-28 12:29
回复 6楼 有容就大
#8
a2619353482012-05-29 09:47
回复 2楼 于祥
那这个题目 只是做了一个CMP的运算 为什么OF就溢出了呢?    是不是和这一步 MOV DX,-1有关,为什么?
#9
a2619353482012-05-29 09:54
回复 3楼 于祥
第一题 的意思是 那还要记住LAHF指令操作示意图吗?哇 还真不好记,。。。额!我翻了书才看到!按你说的第十一位还真是1 然后OF就是1了咯
#10
a2619353482012-05-29 10:07
回复 3楼 于祥
第二题我的想法和你差不多,AH的答案是01H  说明ADC AH,0  的时候CF应该是1 可是为什么后面又变成了O 还是不太明白!
#11
a2619353482012-05-29 10:16
回复 4楼 有容就大
嗯 第3 第4题都懂了!
1