BUF DB 1,2,3,4
DAT DW 5,6,7,8
CNT EQU MYM - BUF
MOV SI,4
MOV AL,BUF[SI]
MOV BX,CNT
CNT EQU MYM - BUF 这还能减? MYM是啥?
江苏三级汇编语言,程序执行后寄存器AL与BX的值,求详细过程
答案:2 悬赏:0
解决时间 2021-02-02 08:31
- 提问者网友:雨之落き
- 2021-02-01 14:34
最佳答案
- 二级知识专家网友:绝望伪装
- 2021-02-01 15:40
BUF DB 1,2,3,4
DAT DW 5,6,7,8
CNT EQU MYM - BUF ;这里少了MYM的定义,如果不是你漏写了,就是题目写错了。
;一般写作CNT EQU $-BUF,CNT是变量名,$是当前地址,BUF是
;变量BUF的首地址,$-BUF则是BUF到当前地址的长度,通常用于获取
;BUF(字符串)的长度
MOV SI,4 ;
MOV AL,BUF[SI] ;BUF[4],即dat的第一个元素5,而dat是dw类型,双字节,其值
;0005,而x86体系是litte endian,即数字的低位存储在低地址,
;所以DAT在内存中顺序存储是 05 00 06 00 07 00 08 00,所以
;BUF[4],即Dat的第1个字节是05,执行完毕后,al是05
MOV BX,CNT ;CNT,如果把MYM改成$,则是BUF到CNT的长度,即12字节,BX
;为000C
DAT DW 5,6,7,8
CNT EQU MYM - BUF ;这里少了MYM的定义,如果不是你漏写了,就是题目写错了。
;一般写作CNT EQU $-BUF,CNT是变量名,$是当前地址,BUF是
;变量BUF的首地址,$-BUF则是BUF到当前地址的长度,通常用于获取
;BUF(字符串)的长度
MOV SI,4 ;
MOV AL,BUF[SI] ;BUF[4],即dat的第一个元素5,而dat是dw类型,双字节,其值
;0005,而x86体系是litte endian,即数字的低位存储在低地址,
;所以DAT在内存中顺序存储是 05 00 06 00 07 00 08 00,所以
;BUF[4],即Dat的第1个字节是05,执行完毕后,al是05
MOV BX,CNT ;CNT,如果把MYM改成$,则是BUF到CNT的长度,即12字节,BX
;为000C
全部回答
- 1楼网友:修女的自白
- 2021-02-01 16:38
首先确定数据段中各数据的存放顺序如下:
da1:
34h
12h
da2:
56h
78h
执行mov di, offset da1后,di指向字节数据34h
di+2指向56h,两数相加结果为34h+56h=8ah
注意:字数据存储在内存中时,低字节存入低地址单元,高字节存入高地址单元。所以da1定义的字数据1234h在内存中的存放顺序是34h、12h而不是12h、34h。你可能是这个地方弄错了,结果就成了68h了
bx的值是da2定义的第一个字节数据56h在内存中的偏移地址。因为数据段中定义的所有数据的地址从0开始顺序加1(以字节为单位),56h是第三个字节,bx的值当然为0002h
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯