- [mywiil] 我没用书上的入栈出栈写,就是先看看不用书上的方法能做出来否? ============== 不错 09/19 09:24
- [njutyangxiao] 谢谢你的指导 09/18 17:00
- [younggay] 嗯,应该说理解的没问题。 09/18 15:41
- [njutyangxiao] 检测点16.1的题目是中是这样定义的: a dw 1,2,3,4,5,6,7,8 b dd 09/16 11:23
- [njutyangxiao] 嗯,谢谢指导 09/16 11:22
- [wsrf] assume伪指令指定了段中标号与相应段寄存器的联系。 09/16 09:46
- [wsrf] 没有问题,不过源代码中 a db 1,2,3,4,5,6,7,8 b dw 0 怎么 09/16 09:43
- [njutyangxiao] 谢谢,keep moving! 09/16 09:06
- [njutyangxiao] 谢谢你的指导 09/16 09:05
- [njutyangxiao] 谢谢你的指导 09/16 09:05
[2009-09-11 15:48] 检测点14.2
题目:编程,用加法和移位指令计算(ax)=(ax)*10。提示,(ax)*10=(ax)*2+(ax)*8
分析:这里要用到shl(shift logic left)逻辑左移,由于左移一位相当于原来的数乘以2,右移一位相当于原来的数除以2。所以(ax)*2 相当于ax左移一位,而(ax)*8相当于ax左移3位。
源代码如下
assume cs:codesg
codesg segment
start:
mov ax,4
mov dx,ax
shl dx,1;把dx中的内容(也就是ax中的内容)给左移一位
mov cl,3;由于(ax*8)需要左移3位,把3放在了cl中
shl ax,cl
add ax,dx;最后把两者相加就得出了(ax)*10的值
mov ax,4c00h
int 21h
codesg ends
end start
结果见上图
分析:这里要用到shl(shift logic left)逻辑左移,由于左移一位相当于原来的数乘以2,右移一位相当于原来的数除以2。所以(ax)*2 相当于ax左移一位,而(ax)*8相当于ax左移3位。
源代码如下
assume cs:codesg
codesg segment
start:
mov ax,4
mov dx,ax
shl dx,1;把dx中的内容(也就是ax中的内容)给左移一位
mov cl,3;由于(ax*8)需要左移3位,把3放在了cl中
shl ax,cl
add ax,dx;最后把两者相加就得出了(ax)*10的值
mov ax,4c00h
int 21h
codesg ends
end start
结果见上图
评论次数(2) |
浏览次数(638) |
类型(汇编作业) |
收藏此文 |