给老总做课后题(IBM-PC汇编语言程序设计第二版),但是都忘光了,请帮忙做一下。

时间:2022-08-09 01:28:26
3.11 执行下列指令后,AX寄存器中的内容是什么?
TABLE DW 10,20,30,40,50
ENTRY DW 3
     .
     .
     .
MOV BX,OFFSET TABLE
ADD BX,ENTRY
MOV AX,[BX]

3.14设(DS)=1B00H,(ES)=2B00H,有关的存储单元的内容如图所示。请写出两条指令把字变量x装入AX寄存器。
         1B00:2000 | 8000 |
         1B00:2002 | 2B00 |
                   |  .   |
                   |  .   |
         2B00:8000 |  x   |

3.15求出以下各十六进制数与十六进制数62A0之和,并根据结果设置标志未SF,ZF,CF和OF的值。
     (1)1234     (2)4321

3.16求出以下各十六进制数与十六进制数4AE0的差值,并根据结果设置标志未SF,ZF,CF和OF的值。
      (1)1234     (2)5D90

3.19下列每条指令执行完后,AX寄存器及CF,SF,ZF和CF的内容是什么?
    MOV AX,0
    DEC AX
    ADD AX,7FFFH
    ADD AX,2
    NOT AX
    SUB AX,0FFFFH
    ADD AX,8000H
    SUB AX,1
    AND AX,58D1H
    SAL AX,1
    SAR AX,1
    NEG AX
    FOR AX,1

3.38 在下列程序的括号中分别填入如下指令:
    (1)LOOP L20
     (2) LOOPE L20
     (3) LOOPNE L20
    试说明三种情况下,程序执行完后,AX,BX,CX和DX四个寄存器的内容分别是什么?
    TITLE EXLOOP.COM
    CODESG SEGMENT
           ASSUME CS:CODESG,DS:CODESG,SS:CODESG
           ORG 100H
   BEGIN: MOV AX,01
          MOV BX,02
          MOV DX,03
          MOV CX,04
   L20:
          INC AX
          ADD BX,AX
          SHR DX,1
          (    )
          RET
   CODESG ENDS
          END BEGIN


3.49试编写一段程序,要求吧ECX、EDX和ESI的内容相加,其和存入EDI寄存器中(不考虑溢出)。



明天给老总,大家当复习一下基础吧。

23 个解决方案

#1


没人帮忙么?

#2


:),你老总是不是还在读书啊???哈哈哈。。。。你叫他上课认真听!!!

#3


3.15题:
1) 0001 0010 0011 0100
  +0101 0010 1101 0100
-----------------------
   0110 0100 1101 0100
SF=0  ZF=0  CF=0  OF=0

2) 0100 0011 0010 0001
  +0110 0010 1010 0000
----------------------
   1010 0101 1100 0001
SF=1  ZF=0  CF=0  OF=1

#4


太简单了。

#5


老总好像也是别人要帮忙的,到我这里已经转到第四手了,大家帮帮忙看看其他题。

#6


3.14
pop [1D000H]
push [33000H]

#7


不知对错?哈哈!我也是初学!

#8


大哥们给判断一下,说明一下解题原理

#9


大家继续帮帮忙啊,很急,在线等待

#10


嗯,我把15题做出来了,16题就比到做就是了

#11


其它题没人帮忙吗?

#12


3.14这样做行不行?
MOV SI,[2000H]
MOV AX,ES:[8000H]

#13


兄弟们,要教作业了,帮帮忙

#14


3.11答案:AX=1E00

#15


http://www.aogosoft.com/

#16


3.11:30
3.14:MOV SI,2000H
     LODSW
3.38:LOOP L20 运行的结果AX=05H,BX=10H,DX=0,CX=0,LOOPNE和LOOPE运行的结果应该和LOOP 运行的结果一样吧,这里不好怎么判断ZF。

#17


3.11 
  AX = 30 ; 实际内存中存储是1E00
内存中应该是: 0A00 1400 1E00 2800
前进3个应该是1E00, 即AX=30

3.14
PUSH [ES:8000]
POP AX

3.15, 3.16 自己计算


3.19  FOR AX,1 , 没有FOR这个指令!

3.38

    (1)LOOP L20    当CX!=0时候,跳转循环
     (2) LOOPE L20   当CX==0时候,且ZF==1, 跳转循环
     (3) LOOPNE L20  当CX!=0时候,且ZF==0, 跳转循环
运行结果是:

(1) AX = 5 , BX = 10, CX = 0, DX = 0
(2) AX = 2 , BX = 4,  CX = 3, DX = 1
(3) AX = 3 , BX = 7,  CX = 2, DX = 0


4.49:

.386
CODESG SEGMENT
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
   ORG 100H          
START:
          ADD ECX, EDX
          ADD ECX, ESI
          MOV EDI, ECX
          MOV AX, 4C00H
          INT 21
CODESG ENDS
END START

#18


谢谢了,有些地方不是很明,比如3.11,向后三个是三个字节,还是三个字?
3.14 MOV SI,[2000H] MOV AX,ES:[8000H] 这样做有什么地方问题?

#19


DW当然是3个字啊

3.14 
MOV SI,[2000H] 
MOV AX,[SI]

#20


第一个 [2000H] 默认属于DX段,SI默认属于EX段。

#21


哦,说错了。SI默认也属于DS段,DI才属于ES段.所以程序应该是:
3.14 
MOV DI,[2000H] 
MOV AX,[DI]

#22


加段前缀后写成
MOV SI,[2000H]
MOV AX,ES:[SI]
不行么?

#23


好了,谢谢路人甲和其他朋友了,作业已经交了。

#1


没人帮忙么?

#2


:),你老总是不是还在读书啊???哈哈哈。。。。你叫他上课认真听!!!

#3


3.15题:
1) 0001 0010 0011 0100
  +0101 0010 1101 0100
-----------------------
   0110 0100 1101 0100
SF=0  ZF=0  CF=0  OF=0

2) 0100 0011 0010 0001
  +0110 0010 1010 0000
----------------------
   1010 0101 1100 0001
SF=1  ZF=0  CF=0  OF=1

#4


太简单了。

#5


老总好像也是别人要帮忙的,到我这里已经转到第四手了,大家帮帮忙看看其他题。

#6


3.14
pop [1D000H]
push [33000H]

#7


不知对错?哈哈!我也是初学!

#8


大哥们给判断一下,说明一下解题原理

#9


大家继续帮帮忙啊,很急,在线等待

#10


嗯,我把15题做出来了,16题就比到做就是了

#11


其它题没人帮忙吗?

#12


3.14这样做行不行?
MOV SI,[2000H]
MOV AX,ES:[8000H]

#13


兄弟们,要教作业了,帮帮忙

#14


3.11答案:AX=1E00

#15


http://www.aogosoft.com/

#16


3.11:30
3.14:MOV SI,2000H
     LODSW
3.38:LOOP L20 运行的结果AX=05H,BX=10H,DX=0,CX=0,LOOPNE和LOOPE运行的结果应该和LOOP 运行的结果一样吧,这里不好怎么判断ZF。

#17


3.11 
  AX = 30 ; 实际内存中存储是1E00
内存中应该是: 0A00 1400 1E00 2800
前进3个应该是1E00, 即AX=30

3.14
PUSH [ES:8000]
POP AX

3.15, 3.16 自己计算


3.19  FOR AX,1 , 没有FOR这个指令!

3.38

    (1)LOOP L20    当CX!=0时候,跳转循环
     (2) LOOPE L20   当CX==0时候,且ZF==1, 跳转循环
     (3) LOOPNE L20  当CX!=0时候,且ZF==0, 跳转循环
运行结果是:

(1) AX = 5 , BX = 10, CX = 0, DX = 0
(2) AX = 2 , BX = 4,  CX = 3, DX = 1
(3) AX = 3 , BX = 7,  CX = 2, DX = 0


4.49:

.386
CODESG SEGMENT
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
   ORG 100H          
START:
          ADD ECX, EDX
          ADD ECX, ESI
          MOV EDI, ECX
          MOV AX, 4C00H
          INT 21
CODESG ENDS
END START

#18


谢谢了,有些地方不是很明,比如3.11,向后三个是三个字节,还是三个字?
3.14 MOV SI,[2000H] MOV AX,ES:[8000H] 这样做有什么地方问题?

#19


DW当然是3个字啊

3.14 
MOV SI,[2000H] 
MOV AX,[SI]

#20


第一个 [2000H] 默认属于DX段,SI默认属于EX段。

#21


哦,说错了。SI默认也属于DS段,DI才属于ES段.所以程序应该是:
3.14 
MOV DI,[2000H] 
MOV AX,[DI]

#22


加段前缀后写成
MOV SI,[2000H]
MOV AX,ES:[SI]
不行么?

#23


好了,谢谢路人甲和其他朋友了,作业已经交了。