初学汇编,遇到点问题
以下三张图是连续的图一到图二我没操作es,为什么es:0008的值从49变为30?
图二到图三,执行mov es:,al后,为什么它的值还是30没变? 有大佬吗?? 贴出程序看看吧 erh 发表于 2018-2-8 22:47
贴出程序看看吧
就是实验九
assume cs:code,ds:data,ss:stack
data segment
db 'Welcome To Assembly'
db 02h,24h,71h
data ends
stack segment stack
dw 8 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
xor bx,bx
mov cx,3
mov ax,0b872h
s0: push cx
push ax
push bx
mov es,ax
mov si,0
mov di,0
mov cx,13h
s1: mov al,ds:
mov es:di,al
inc si
add di,2
loop s1
mov di,1
pop bx
mov al,ds:13h
inc bx
mov cx,13h
s2: mov es:,al
add di,2
loop s2
pop ax
add ax,0ah
pop cx
loop s0
mov ax,4c00h
int 21h
code ends
end start
怀疑0b872h作为es的值是不是跟你在操作系统一些程序冲突?换一个值试试。比如0774h等值...... erh 发表于 2018-2-12 11:39
怀疑0b872h作为es的值是不是跟你在操作系统一些程序冲突?换一个值试试。比如0774h等值......
兄弟,你DEBUG看的地址是显存的地址,0b872:0008=49就是说这个地址显示的字符此时是‘I’
执行下一条指令后,显示的内容发生了变化,所有显存的数值发生了改变,0b872:0008此时=30,也就是说该位置显示的是‘0’;
这个显存位置好像是屏幕第12行左右吧,你自己仔细看看 {:10_266:}回复错了对象,不好意思,你看上一条回复,看是不是那样。
页:
[1]