程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0eh,0fh,0ffh
a ends
b segment
db 0,0,0,0,0,0,0,0
b ends
code segment
start:mov ax,b
mov ss,ax
mov sp,10h
mov ax,a
mov es,ax
mov bx,0
mov cx,8
s:push es:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
这道题感觉不难。
- [qiangzi] ;(因为bx+1,要等于0,所以第2个字节要为0) 这话好像有点错误吧,是不是第2,3个字节为0啊 01/21 19:23
- [ryan1779] 是啊,后来发现写 mov [bx+2],cx 就好了 08/11 22:36
- [tinyparticle] 第(2)中有错误,mov [bx+2],0b83h此条指令中的0b83h是博主debug中的默认段地 07/31 18:22
- [ryan1779] 感谢ls几位的热心解答,总于搞出来了。 mov ax,0a8h[bx],bx出错了,又多用了个寄存 07/28 10:58
- [younggay] 上面的地址计算看明白了,是手动计算的,没什么问题。呵呵 不过,我跟踪了一下,你的程序在寻址想内 07/27 10:11
- [younggay] mov ax,0a8h[bx] =================== 怎么是0a8H的起始 07/27 09:53
- [younggay] 除法溢出,说明做运算的两个数据可能有点问题。你单步跟踪,看看到底是哪里出现溢出,看一下此时的两个数据 07/27 09:45
- [tinyparticle] mov ax,0a8h[bx] mov es:0ah[bx],ax 这里好像 07/26 20:04
- [游客] 程序第一行的assume写错了,编译出错,修改后程序运行正确。 07/20 09:37
- [ryan1779] 现在的理解是,16字节内的(包括16字节,算一个段,10H),超出16字节,但不超出32字节的,也算 07/19 15:52