饼干焦糖 发表于 2018-2-8 16:19:17

初学汇编,遇到点问题

以下三张图是连续的
图一到图二我没操作es,为什么es:0008的值从49变为30?
图二到图三,执行mov es:,al后,为什么它的值还是30没变?

饼干焦糖 发表于 2018-2-8 21:27:10

有大佬吗??

erh 发表于 2018-2-8 22:47:45

贴出程序看看吧

饼干焦糖 发表于 2018-2-9 08:49:04

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

erh 发表于 2018-2-12 11:39:32

怀疑0b872h作为es的值是不是跟你在操作系统一些程序冲突?换一个值试试。比如0774h等值......

bin2yx 发表于 2018-2-17 11:17:29

erh 发表于 2018-2-12 11:39
怀疑0b872h作为es的值是不是跟你在操作系统一些程序冲突?换一个值试试。比如0774h等值......

兄弟,你DEBUG看的地址是显存的地址,0b872:0008=49就是说这个地址显示的字符此时是‘I’
执行下一条指令后,显示的内容发生了变化,所有显存的数值发生了改变,0b872:0008此时=30,也就是说该位置显示的是‘0’;
这个显存位置好像是屏幕第12行左右吧,你自己仔细看看

bin2yx 发表于 2018-2-17 11:20:15

{:10_266:}回复错了对象,不好意思,你看上一条回复,看是不是那样。
页: [1]
查看完整版本: 初学汇编,遇到点问题