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

汇编语言段定义问题

梁朝斌 发布于 2013-01-13 22:31, 1557 次点击
那个学得好的,请给我详细解释一下,我马上给分你哦
DA1  DB 83H,72H,61H,94H,5AH
    ┇
     MOV CX,WORD PTR DA1
     AND CX,0FH
     MOV AL,DA1+3
     SHL AL,CL          上述指令序列执行后,AL=__0A0H____,CL=__03H____。     



89、现有如下程序段:      
    DATA SEGMENT DA3 EQU 1234H
    ORG 0020H DA4 EQU $-DA2
    DA1 DW 12H,23H DA5 DB 31H,32H
    DA2 DB 11H,21H DATA ENDS
 请回答:(1)该程序段已占有的存储字节数是多少?(2)符号名DA4的值是多少?符号名DA5的值是多少?

12 回复
#2
青春无限2013-01-14 06:41
先看看
#3
wp2319572013-01-14 08:52
以下是引用梁朝斌在2013-1-13 22:31:09的发言:

那个学得好的,请给我详细解释一下,我马上给分你哦
DA1  DB 83H,72H,61H,94H,5AH
    ┇
     MOV CX,WORD PTR DA1//这里cx=94617283H
     AND CX,0FH         //这里cx=3h
     MOV AL,DA1+3       //这里al=94h
     SHL AL,CL          //这里al=al*2^3=4A0=A0
    上述指令序列执行后,AL=__0A0H____,CL=__03H____。     
尝试解释一下第一个问题

[ 本帖最后由 wp231957 于 2013-1-14 10:30 编辑 ]
#4
梁朝斌2013-01-14 11:22
能给解释一下程序是什么意思吗?知道程序的意思就可以了
#5
wp2319572013-01-14 11:28
回复 4楼 梁朝斌
这里都是普通的计算  
我看不出来 有啥功能
#6
zklhp2013-01-14 15:44
搬砖忙没心情看 祝楼主好运
#7
水哥2013-01-14 17:17
这作业还真挺难的,看不懂
#8
yibana2013-01-14 22:16
以下是引用梁朝斌在2013-1-13 22:31:09的发言:

那个学得好的,请给我详细解释一下,我马上给分你哦
DA1  DB 83H,72H,61H,94H,5AH
    ┇
     MOV CX,WORD PTR DA1 ; WORD 是两个byte 数值按高位到低位,所以cx的值是7283
     AND CX,0FH    ;0F = 1111 ,这里and相当于清cx高12位,只保留后4位,(7283 = 111001010000011),结果是03(0011)
     MOV AL,DA1+3 ;al = DA1开始偏移3位置处,从0开始算起,所以+3 就是 取第4个,所以al = 94H
     SHL AL,CL     ; 这个是左移,AL = 94H = 10010100 左移 3位就是结果10100000 所以等于A0   

上述指令序列执行后,AL=__0A0H____,CL=__03H____。     



89、现有如下程序段:      
    DATA SEGMENT DA3 EQU 1234H
    ORG 0020H DA4 EQU $-DA2
    DA1 DW 12H,23H DA5 DB 31H,32H
    DA2 DB 11H,21H DATA ENDS
 请回答:(1)该程序段已占有的存储字节数是多少?(2)符号名DA4的值是多少?符号名DA5的值是多少?
DA1 是dw类型,所以是4*2 DA5 是db ,所以是2*1 DA2 也是db ,所以是2*1 一共12个字节
DA4 的值等于0020H - DA2 因为$表示取当前地址

如上!

[ 本帖最后由 yibana 于 2013-1-14 22:48 编辑 ]
#9
wp2319572013-01-14 22:18
and 怎么会是加法
#10
yibana2013-01-14 22:26
以下是引用wp231957在2013-1-14 22:18:12的发言:

and 怎么会是加法

看成add了
#11
zklhp2013-01-15 12:18
那个学得好的,请给我详细解释一下,我马上给分你哦
DA1  DB 83H,72H,61H,94H,5AH
    ┇
     MOV CX,WORD PTR DA1 ; WORD 是两个byte 数值按高位到低位,所以cx的值是7283
     AND CX,0FH    ;0F = 1111 ,这里and相当于清cx高12位,只保留后4位,(7283 = 111001010000011),结果是03(0011) 这步如果明白原理了一眼就看出来了 就是保留最后一个十六进制位 慢慢就习惯这种用法了 哦 上面的1111神马的是二进制
     MOV AL,DA1+3 ;al = DA1开始偏移3位置处,从0开始算起,所以+3 就是 取第4个,所以al = 94H
     SHL AL,CL     ; 这个是左移,AL = 94H = 10010100 左移 3位就是结果10100000 所以等于A0

上述指令序列执行后,AL=__0A0H____,CL=__03H____。     



89、现有如下程序段:      
    DATA SEGMENT DA3 EQU 1234H
    ORG 0020H DA4 EQU $-DA2
    DA1 DW 12H,23H DA5 DB 31H,32H
    DA2 DB 11H,21H DATA ENDS
请回答:(1)该程序段已占有的存储字节数是多少?(2)符号名DA4的值是多少?符号名DA5的值是多少?
DA1 是dw类型,所以是4*2 DA5 是db ,所以是2*1 DA2 也是db ,所以是2*1 一共12个字节
DA4 的值等于0020H - DA2 因为$表示取当前地址

DA3 EQU 1234H  DA4 EQU $-DA2 这样的属于常量 不占程序的空间罢

所以占用是DA1的4字节+DA5的2字节+DA2的2字节+对齐的20h字节 等于28h=40字节

大概是这个样子的

0C75:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0C75:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0C75:0020  12 00 23 00 31 32 11 21-00 00 00 00 00 00 00 00   ..#.12.!........
0C75:0030  B8 75 0C 8E D8 B4 01 CD-21 B4 4C CD 21 F6 C6 80   .u......!.L.!...

DA4 EQU $-DA2 这里$是20h DA2是26h 结果是0fffah罢


DA5 DB 31H,32H  是024h

这个题挺饶人的 但考的确实是基础知识 不是什么偏 难 怪 如果不会建议好好看书
#12
水哥2013-01-15 14:59
Z大手痒痒,帮人写作业啦,还是Z大基础扎实
#13
zklhp2013-01-15 15:11
以下是引用水哥在2013-1-15 14:59:47的发言:

Z大手痒痒,帮人写作业啦,还是Z大基础扎实

没有靠谱答案 忍不住回答了

能让别人学到东西 做个作业没什么的
1