汇编语言的一些程序设计题,谁能举例解答一下

这些题目都是我们老师画的重点 没有具体的数据,解答时请说明使用的数据是哪些,最好是能用a,b,c这些小写字母代替,能解答多少算多少,重修的伤不起
1,交换

1)内存单元相互交换内容;2)AX。BX相互交换内容
2,寄存器清零(用一条汇编指令)
MOV AX,0
XOR AX,AX
SUB AX,AX
AND AX,0
3,X=X+Y X=X-Y X=(Z+100)/50 Z=X*Y+100 Y=(Z+100)/X,其中Z为32位 X,Y为16位,X1,X2为8位
4循环程序设计
1)复制 将内存单元某块内容复制到另一块中
2)清零 将内存单元某块内容清零

你的问题问的不对,寄存机 AX BX CX DX就是具体的数据,你可以把这些当成变量使用
a,b,c,d在程序中是分配的内存空间,和寄存器存在着本质上的区别,所以这些题目使用的数据就是:AX,BX,CX,DX这些寄存器数据

1、交换可以用堆栈进行,
AX。BX相互交换内容

PUSH AX
PUSH BX
POP AX
POP BX
这样AX和BX内容就交换了

2、
为了方便你理解,写一些不正确的表达式吧
MOV AX,0 相当于 int a=0;
XOR AX,AX XOR这个指令,如果后面两个数相同,则为0,并将0存放到第一个寄存器AX中
SUB AX,AX 相当于 int a=1; a=a-a; 所以结果也是0
AND AX,0 AND指令,将后面两个数据按位‘与’操作,只要有一个数为0,结果就为0,所以AX的结果就是0了。

第三题看不懂什么意思,想问什么东西?

4、
内存复制的代码:
mov si,offset setscreen;原数据偏移地址
mov di,0 ;目标偏移地址
mov cx,offset setscreen_end-offset setscreen ;计算出数据长度
cld ;di,si每次执行movsb的时候都递增1
rep movsb ;开始复制

清零:
如果数据段有一块内存需要清零
mov cx,100; // 数据段长度
mov si,0; // 开始地址
mov al,0;
_start:
mov byte ptr ds:[si],al;
dec cx;
inc si; // 指向下一个字节
cmp cx,0;
jnz _start; // 如果cx不为0事继续清空下一个内存

百度【幽灵代码论坛】加入我们一起学习追问

内存单元用堆栈交换吗,怎么交换。还有第二题的一条汇编指令清零,那条指令在哪,第三题我也搞不清是什么,查看以前的重点觉得有点像LOOP循环复制

追答

堆栈的特性,先进后出,调换顺序后“先进先出”就能调换了。这是常识问题,就像int a=1;为什么a等于1一样。没有为什么的。

第二题本身就不是题目,你写出来的这些全部都是一条一句清零的代码。

追问

谢谢你了

追答

你还是好好学习一下80X86汇编的基础吧,感觉你有些常理性的内容都不怎么熟悉,这样考试不容易通过的。看看 王爽的那本书吧,还不错

温馨提示:答案为网友推荐,仅供参考
相似回答