|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
;这题的代码在xp系统的debug下测试过程中出错,但在win7 64位下用debug32(需到论坛下载)测试通过
;用栈来实现就得在一次循环里计算2个字节,高位存入AH,低位存入AL,再把AX的值入栈
;计算开始时,用来存放偏移地址的BX值为7(从后往前计算,即8+8,7+7……2+2,1+1,因为push是从大的内存单元往小的内存单元存放),依次递减
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:mov ax,a
mov ds,ax ;a段做为数据段
mov ax,b
mov es,ax ;b段用es寄存器做段寄存器
mov ax,c
mov ss,ax ;c段做为栈空间使用
mov sp,8 ;栈顶偏移地址为8,因为我们将会往栈放入4个字型数据,即8个字节,依次放入偏移地址0-7号单元
mov bx,7
mov cx,4 ;一次循环处理2个字节,所以循环4次
s:mov ah,ds:[bx]
add ah,es:[bx] ;计算高位的和存入AH
sub bx,1 ;偏移地址减1
mov al,ds:[bx]
add al,es:[bx] ;计算低位的和存入AL
sub bx,1 ;偏移地址减1
push ax ;将结果入栈,也就是放在c段
mov ax,0 ;将ax置0
loop s
mov ax,4c00h
int 21h
code ends
end start
用栈的方式感觉麻烦一点,呵呵……
有看过论坛上其他朋友的方法
刚开始学,如有错误望各位多多指正 |
|