汇编 偏移量

4.3、把下列C语言的变量定义语句改写成与之等价的汇编语言语句。 1)、char ch1, ch2[3], ch3[]="Are you ready?", ch4='Q'; 2)、int w1, w2[5], w3=0x1234, w4[]={90, 89, 432, 344}; 3)、long int d1=1234, d2, d3[10], d4[]={1, 2, 3, 4, 5, 6}; 4.4、假设4.3题中三组变量在内存中是连续存放的,且变量ch1的偏移量是20H,试求出其它每个变量的偏移量。 4.3题我解决了,大家主要帮我看看4.4题,从ch4的偏移量那里我看不明白,偏移量为什么是33H呢,接下来后面的也帮解析解析下,谢谢。

其实问题很简单,就是因为字符串在C语言中存放存在一个\0的结束符的问题,在ch3变量开始时,偏移量为24H这个没问题吧?ch3中的可见字符包括空格结束之后是31H加上\0结束符就是32H所以ch4就是33H了。 至于第二问因为都是整型,而整型变量都占2字节所以以此类推就行了,整型变量数组不存在\0结束符,所以不用在常量赋值的数组维数确定上加一。。 第三问是long int型变量,占用4个字节,所以需要对每个数所占的位数乘四(上题乘二),长整数组同样不存在结束符。 追问: ch3那里我还是数不出有到32H啊,( ⊙ o ⊙ )啊! 回答: char ch1, ch2[3], 20H 21H 22H 23H ch3[]="A r e y o u r e a d y ? " (\0) , ch4='Q'; 24H 25H 26H 27H 28H 29H 2AH 2BH 2CH 2DH 2EH 2FH 30H 31H 32H 33H 追问: w3,d3,d4的偏移量我还是不解。虽然我知道怎么算,可算出来老是和答案不对。 麻烦你了 啊。我会给你加分的。 回答: W3是的类型是整型,只不过它使用 十六进制 赋值 来初始化, 任然 只占用两个 字节 。 w3的地址是2CH (前面元素个数是6个,所以就是20H+6*2=20H+CH=2CH) d3的首元素地址是28H (前面元素个数是2个,所以就是20H+2*4=20H+8H=28H) d4的首元素地址是50H (前面元素个数是12个,所以就是20H+12*4=20H+30H=50H) 追问: 答案分别是40H,52H,66H,不解啊 回答: 很好理解,题目很乱,它给的答案的意思是第一小题从20H开始,之后的小题紧接上一题的最后地址 追问: ch4=33H ,w1=34H w2=36H ,w3为什么等于40H呢,不是36+5=41H吗? 回答: ch4=33H w1=34H 从w1开始,w3之前有6个元素,所以就是w1+6*2=34H+0CH=40H
温馨提示:答案为网友推荐,仅供参考