关于汇编语言和汇编程序

来源:百度知道 编辑:UC知道 时间:2024/06/03 00:36:33
1:设SP=2000H,AX=3000H,BX=5000H;请利用堆栈的特点编一段程序使AX和BX内容交换,并在DEBUG状态下进行汇编和调试
2:设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG命令将存储偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完时,AX中内容是什么?
程序清单如下:
MOV AX , BX
MOV AX ,0304H
MOV AX ,[0304H]
MOV AX, [BX]
MOV AX, 0001[BX]
MOV AX, [BX][SI]
MOV AX, 0001[BX][SI]
HLT
谢谢各位大虾了~~
对了,需要完整的汇编代码。。。谢谢了。。。。

堆栈的特点啊..先进后出啊..
比如你push ax 再push bx 最后出来的先是bx的值 再才是ax的值

所以利用堆栈的特点对调ax bx内容的程序代码
push ax
push bx
pop ax
pop bx
就可以了
2.:
MOV AX , BX ;ax==0300h
MOV AX ,0304H ;ax==0304h
MOV AX ,[0304H]
MOV AX, [BX] ;ax==0b0ah
MOV AX, 0001[BX] ;ax==0c0bh
MOV AX, [BX][SI] ;ax==0d0ch
MOV AX, 0001[BX][SI] ;ax==0e0dh
HLT
最后 ax==0e0dh

1.push ax
push bx
pop ax
pop bx
可以实现ax,bx互换,可以在debug条件下-p单步执行查看交换过程

2.可以用-E DS:300 0A 0B 0C 0D 0E把数据送入300~304h,注意在debug中执行上述指令必须等给mov ax,@data,mov ds,ax执行后再存入数据否则得不到正确的debug结果
MOV AX , BX ;把bx赋值给ax=300h
mov ax,0304 ;把0304赋值给ax
mov AX,[0304] ;(这里要写成mov ax,ds:[0304]不然程序会直接把304传给AX而不是bx间接寻址的内容了),ax=[304]=0E
mov ax,[bx] ;ax=[301][300]=0B0A
mov ax,[bx+1] ;ax=[302][301]=0C0B
mov ax,[bx+si];ax=[303][302]=ODOC
mov ax,[bx+si+1];ax=[304][303]=0E0D
HLT

AX=0E0D