汇编语言小问题 微机原理
微机原理中的几道练习题,由于初次接触有些迷糊,请高手解决一下,事后重谢!1.设CS=1000H,DS=2000H,ES=3000H,SS=4000h,IP=100H,SP...
微机原理中的几道练习题,由于初次接触有些迷糊,请高手解决一下,事后重谢!
1.设CS=1000H,DS=2000H,ES=3000H,SS=4000h,IP=100H,SP=200H,BX=300H,BP=400H,SI=500H,则下一条待执行指令的物理地址是多少?当前栈顶的物理地址是多少?[BX]、[BP]、ES:[BX+SI]代表的存储单元的物理地址分别是多少?(给出计算过程)
2.编译汇编指令实现:测试BX的第6、7、8、12、13位是否同时为0(给出注释).
3.指出下列指令错误的原因
MOV CL,300;
MOV BX,Dl;
MOV ES,1000H;
TEST BX,[CX];
SUB [BX],[BP+SI] 展开
1.设CS=1000H,DS=2000H,ES=3000H,SS=4000h,IP=100H,SP=200H,BX=300H,BP=400H,SI=500H,则下一条待执行指令的物理地址是多少?当前栈顶的物理地址是多少?[BX]、[BP]、ES:[BX+SI]代表的存储单元的物理地址分别是多少?(给出计算过程)
2.编译汇编指令实现:测试BX的第6、7、8、12、13位是否同时为0(给出注释).
3.指出下列指令错误的原因
MOV CL,300;
MOV BX,Dl;
MOV ES,1000H;
TEST BX,[CX];
SUB [BX],[BP+SI] 展开
5个回答
展开全部
怎么没有看到问题啊?等待中.................
第一题:
当前指令物理地址是由cs:ip决定的,则下一条指令应该是cs*16+(ip+2H)=10000H+102H=10102H
当前栈顶物理地址为SS*16+SP=40200H
[BX]对应的段寄存器是DS所以物理地址是DS*16+BX=20300H
[BP]对应的是SS所以物理地址是SS*16+BP=40400H
ES:[BX+SI]的物理地址为ES*16+BX+SI=30800H
第二题:
对16位数的第6、7、8、12、13位判断,只要用test指令就可以了
DATA SEGMENT ;数据段定义
S1 DB 'ZERO','$' ;为零时输出的内容
S2 DB 'NOT ZERO','$' ;不为零时输出的内容
DATA ENDS
CODE SEGMENT ;代码段执行
ASSUME CS:CODE,DS:DATA ;初始化
START: MOV AX,DATA
MOV DS,AX ;确定段地址
TEST BX,18EOH ;对6、7、8、12、13位进行测试
JZ Z ;如果为零跳转到Z执行
LEA DX,S2 ;不为零执行
JMP DO
Z:LEA DX,S1
DO: MOV AH,09H ;调用dos中断,输出提示信息
INT 21H
MOV AH,4CH
INT21H
CODE ENDS
END START
第三题:
MOV CL,300;溢出错误
MOV BX,Dl;原操作数和目标操作数位数不一致
MOV ES,1000H;段寄存器不能立即寻址
TEST BX,[CX];test原操作数不能用内存变量
SUB [BX],[BP+SI];内存和内存间不能直接操作
第一题:
当前指令物理地址是由cs:ip决定的,则下一条指令应该是cs*16+(ip+2H)=10000H+102H=10102H
当前栈顶物理地址为SS*16+SP=40200H
[BX]对应的段寄存器是DS所以物理地址是DS*16+BX=20300H
[BP]对应的是SS所以物理地址是SS*16+BP=40400H
ES:[BX+SI]的物理地址为ES*16+BX+SI=30800H
第二题:
对16位数的第6、7、8、12、13位判断,只要用test指令就可以了
DATA SEGMENT ;数据段定义
S1 DB 'ZERO','$' ;为零时输出的内容
S2 DB 'NOT ZERO','$' ;不为零时输出的内容
DATA ENDS
CODE SEGMENT ;代码段执行
ASSUME CS:CODE,DS:DATA ;初始化
START: MOV AX,DATA
MOV DS,AX ;确定段地址
TEST BX,18EOH ;对6、7、8、12、13位进行测试
JZ Z ;如果为零跳转到Z执行
LEA DX,S2 ;不为零执行
JMP DO
Z:LEA DX,S1
DO: MOV AH,09H ;调用dos中断,输出提示信息
INT 21H
MOV AH,4CH
INT21H
CODE ENDS
END START
第三题:
MOV CL,300;溢出错误
MOV BX,Dl;原操作数和目标操作数位数不一致
MOV ES,1000H;段寄存器不能立即寻址
TEST BX,[CX];test原操作数不能用内存变量
SUB [BX],[BP+SI];内存和内存间不能直接操作
刘
2024-11-14 广告
2024-11-14 广告
深圳市响河测控技术有限公司,坐落于电力电子产业密集的珠三角地区--广东深圳,是国内外前列的电力电子测试设备研发制造商,致力于为电力电子、科研提供高可靠性、高精度的电子测试设备。响河测控技术起源于航天航空产业,具备雄厚的技术研发力量及对高精度...
点击进入详情页
本回答由刘提供
展开全部
1.
下一条待执行指令的物理地址是10100H=(CS)<<4+(IP)
当前栈顶的物理地址30200H=(SS)<<4+(SP)
[BX]、[BP]、ES:[BX+SI]代表的存储单元的物理地址分别是:
[BX]:20300H=(DS)<<4+(BX)
[BP]:40400H=(SS)<<4+(BP)
ES:[BX+SI]:30800H=(ES)<<4+(BX)+(SI)
2.
TEST BX,0011000111000000B
;即TEST BX,31C0H
;将需要测试的位置1,其余置0,就可以了
;若结果为0,则说明BX相应的位同时为0,否则,反之
3.
MOV CL,300 ;超出目标寄存器的表示范围
MOV BX,Dl ;源操作数与目标操作数长度不同
MOV ES,1000H ;立即数不能直接送段寄存器
TEST BX,[CX] ;CX不能用于寄存器间接寻址
SUB [BX],[BP+SI] ;1.源操作数与目标操作数不能同时为存储器操作数。
;2.操作数长度未知,实际上,指定了寄存器,长度就定了
下一条待执行指令的物理地址是10100H=(CS)<<4+(IP)
当前栈顶的物理地址30200H=(SS)<<4+(SP)
[BX]、[BP]、ES:[BX+SI]代表的存储单元的物理地址分别是:
[BX]:20300H=(DS)<<4+(BX)
[BP]:40400H=(SS)<<4+(BP)
ES:[BX+SI]:30800H=(ES)<<4+(BX)+(SI)
2.
TEST BX,0011000111000000B
;即TEST BX,31C0H
;将需要测试的位置1,其余置0,就可以了
;若结果为0,则说明BX相应的位同时为0,否则,反之
3.
MOV CL,300 ;超出目标寄存器的表示范围
MOV BX,Dl ;源操作数与目标操作数长度不同
MOV ES,1000H ;立即数不能直接送段寄存器
TEST BX,[CX] ;CX不能用于寄存器间接寻址
SUB [BX],[BP+SI] ;1.源操作数与目标操作数不能同时为存储器操作数。
;2.操作数长度未知,实际上,指定了寄存器,长度就定了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1,下一条指令物理地址pa=cs*16+ip=10100H
当前栈顶pa=ss*16+sp=40200H
【bx】的pa=ds*16+ea,ea=bx=300H,pa=20300H
[bp] pa=ss*16+bp=40400H
es:[bx+si] pa=es*16+(bx+si)=30800H
2,test bx,0001 1000 1110 0000 B ;从右到左,从1开始数,部分题目可能是从0开始数
test做伪与操作,只修改标志位,不改变bx值,测试时,无关位&0 == 0,有关位&1 == x(仅当有关位为0时,x等于0)
当bx满足6、7、8、12、13位同时为0时,
and 的结果bx为0,zf=1
test的结果bx不变,zf=1
然后用jz 条件跳转控制程序流程以响应不同的测试结果
3, mov cl,300; 溢出,cl8位,无符号8位数范围0~255.这点就像ip地址范围
mov bx,di; 没错,经debug验证
mov es,1000H; es为段寄存器,不能直接用立即数赋值,需经通用寄存器(一般用ax)中转
test bx,[cx]; []中可以出现的寄存器,bx,bp,si,di,
ea=(bx/bp)+(si/di)+disp 即bx,bp不同时出现,si,di也不同时出现
sub [bx],[bp+si];这里不能两边都是存储器
楼主可以开着debug.exe做题,蛮好
当前栈顶pa=ss*16+sp=40200H
【bx】的pa=ds*16+ea,ea=bx=300H,pa=20300H
[bp] pa=ss*16+bp=40400H
es:[bx+si] pa=es*16+(bx+si)=30800H
2,test bx,0001 1000 1110 0000 B ;从右到左,从1开始数,部分题目可能是从0开始数
test做伪与操作,只修改标志位,不改变bx值,测试时,无关位&0 == 0,有关位&1 == x(仅当有关位为0时,x等于0)
当bx满足6、7、8、12、13位同时为0时,
and 的结果bx为0,zf=1
test的结果bx不变,zf=1
然后用jz 条件跳转控制程序流程以响应不同的测试结果
3, mov cl,300; 溢出,cl8位,无符号8位数范围0~255.这点就像ip地址范围
mov bx,di; 没错,经debug验证
mov es,1000H; es为段寄存器,不能直接用立即数赋值,需经通用寄存器(一般用ax)中转
test bx,[cx]; []中可以出现的寄存器,bx,bp,si,di,
ea=(bx/bp)+(si/di)+disp 即bx,bp不同时出现,si,di也不同时出现
sub [bx],[bp+si];这里不能两边都是存储器
楼主可以开着debug.exe做题,蛮好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给我吧,我帮你
这个作业还是自己做吧,虽然知道怎么做,但是感觉这样的东西比较容易找到答案的
这个作业还是自己做吧,虽然知道怎么做,但是感觉这样的东西比较容易找到答案的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
友情接分
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询