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

有几个题不会做!请教一下!

guixiaolan 发布于 2007-03-20 12:17, 1346 次点击
1.
DSEG SEGMENT
A DW 1234H
B DB 56H
C EQU A+1
DSEG ENDS
执行MOV BX,C指令后,BX寄存器中的内容是______

2.
DESG SEGMENT
DAT1 DB '1234'
DAT2 DW 5678H
ADDR EQU DAT2-DAT1
DESG ENDS
执行指令MOV AX,ADDR后,AX寄存器中的内容是_____

能否详细说明一下解答过程!
17 回复
#2
菜鸟上路2007-03-20 15:45
第一题的C EQU A+1语句是错的,可以写成X EQU A+1
BX=1235H
第二题AX=5374H
DAT1 DB '1234'是以DB存放字符串,共2个DW大小,相减的时候取低16位
DAT2 DW 5678H 是以DW存放数据,
ADDR=5678H-0304H=5374H
#3
guixiaolan2007-03-20 17:41
题没有抄错!
答案是
1.5612H
2.0004H
我不知道是怎么得来的!
#4
菜鸟上路2007-03-20 17:50
回复:(guixiaolan)题没有抄错!答案是1.5612H2.000...

太假了,怎么会是这种答案??!!

#5
guixiaolan2007-03-20 19:47
没办法,这些都是三级PC的考试题!
我也搞不懂啊,所以也很郁闷啊!
过些天就要考三级了,我还大家帮帮我呢!
#6
guixiaolan2007-03-21 10:50
大家帮帮忙啊!就快要考试了,我还有好多题不会做呢!
#7
angeloc2007-03-21 17:40

1.
DSEG SEGMENT
A DW 1234H
B DB 56H
C EQU A+1
DSEG ENDS
执行MOV BX,C指令后,BX寄存器中存的是A的地址+1
A的地址+1取出的值是5612H
但是BX寄存器中的内容是5612H,是错误的!是不是出错题了???希望明白人教教我。。。

2.
DESG SEGMENT
DAT1 DB '1234'
DAT2 DW 5678H
ADDR EQU DAT2-DAT1
DESG ENDS
数据段定义中赋值语句EQU将表达式(DAT2-DAT1)的值赋予ADDR,表达式DAT2-DAT1的值为变量DAT2和变量DAT1相距字节数4,通过赋值语句将其赋予符号名ADDR,所以MOV AX,ADDR执行后,AX中内容为0004H。

#8
guixiaolan2007-03-22 12:12
以下是引用angeloc在2007-3-21 17:40:35的发言:

1.
DSEG SEGMENT
A DW 1234H
B DB 56H
C EQU A+1
DSEG ENDS
执行MOV BX,C指令后,BX寄存器中存的是A的地址+1
A的地址+1取出的值是5612H
但是BX寄存器中的内容是5612H,是错误的!是不是出错题了???希望明白人教教我。。。

2.
DESG SEGMENT
DAT1 DB '1234'
DAT2 DW 5678H
ADDR EQU DAT2-DAT1
DESG ENDS
数据段定义中赋值语句EQU将表达式(DAT2-DAT1)的值赋予ADDR,表达式DAT2-DAT1的值为变量DAT2和变量DAT1相距字节数4,通过赋值语句将其赋予符号名ADDR,所以MOV AX,ADDR执行后,AX中内容为0004H。

题没有出错!

第二题变量DAT2和变量DAT1相距字节数怎么是4呢?不是二吗?
DB '1234'在内存中是怎么存储的?

#9
菜鸟上路2007-03-22 12:17

1、原来自己没看清题,A+1是地址改变,[A]+1才是值。其他疑问同LS。
2、。。。

#10
angeloc2007-03-22 12:35
DAT1 DB '1234'
DAT2 DW 5678H

内存分布情况是这样

DAT1->1的ASC码
2的ASC码
3的ASC码
4的ASC码
DAT2->78H
56H

DB '1234' 和 DB '1','2','3','4' 是一样的
#11
guixiaolan2007-03-22 12:51
我一直以为是这样的!
1的ASC码
2的ASC码
3的ASC码
DAT1->4的ASC码
78H
DAT2->56H

可是有这样一道题
若定义DAT DB '1234',执行指令MOV AX,WORD PTR DAT后,AX寄存器的内容是3412H
这是为什么呢


[此贴子已经被作者于2007-3-22 12:58:00编辑过]

#12
angeloc2007-03-22 13:33
以下是引用guixiaolan在2007-3-22 12:51:07的发言:
我一直以为是这样的!
1的ASC码
2的ASC码
3的ASC码
DAT1->4的ASC码
78H
DAT2->56H

可是有这样一道题
若定义DAT DB '1234',执行指令MOV AX,WORD PTR DAT后,AX寄存器的内容是3412H
这是为什么呢



DAT->01H
02H
03H
04H
因为DAT是DB占4个字节,WORD PTR DAT是按字取DAT(2个字节),AX可以放4个字节,所以是3412

#13
guixiaolan2007-03-22 14:21
以下是引用angeloc在2007-3-22 13:33:16的发言:

DAT->01H
02H
03H
04H
因为DAT是DB占4个字节,WORD PTR DAT是按字取DAT(2个字节),AX可以放4个字节,所以是3412

答案是这样讲的
DAT是字节类型,分别以12H,34H存储,执行指令MOV AX,WORD PTR DAT后强制转换为字类型,12H为低地址,34H为高地址,所以AX中的内容是3412H!

#14
guixiaolan2007-03-22 14:28
是3412H,不是3412
#15
angeloc2007-03-22 14:58

晕倒!DB ‘1234’在内存里是12H,34H么?。。。

顺便说下,最后AX里存的就上3412H,我是说取出来的时候是按值取的。

[此贴子已经被作者于2007-3-22 15:10:59编辑过]

#16
guixiaolan2007-03-22 15:11

我也没办法啊!按照你说的应该都是错的啊!
答案就是这样啊!
这几道题都是这几年的三级PC考试试题啊!

但是你的答案又是怎么得来的呢!

#17
angeloc2007-03-22 15:35
DAT->1的ASC
2的ASC
3的ASC
4的ASC

因为DAT是DB占4个字节,
WORD PTR DAT是按字取DAT值(2个字节)
AX可以放4个字节,所以是先取前2个字节的值为12,放到AL 12H,再取后面2个字节值34,放到AH 34H。
不知道我这么说有什么不妥之处?

[此贴子已经被作者于2007-3-22 16:02:50编辑过]

#18
liuminghui2007-03-22 15:42
楼主发贴时应该是学校的学生吧!

现在好象硬件都是用c编的

汇编用得少,当然,汇编能够提高程序运行的速度
1