回 帖 发 新 帖 刷新版面

主题:麻烦大家帮我解释一下?

data        segment
 bg        db 0ah,0dh,"two tigers$"
 freq        dw 2 dup(262,294,330,262)
        dw 2 dup(330,349,392)
        dw 2 dup(392,440,392,349,330,262)
        dw 2 dup(294,196,262),0
 time       dw 1000 dup(2500),5000,2500,2500,5000    
            dw 2 dup(1200,1200,1200,1200,2500,2500)    
            dw 2 dup(2500,2500,5000)
 data        ends
 stack        segment para stack 'stack'
        dw 100 dup(?)
 stack        ends

 code        segment
        assume cs:code,ds:data,ss:stackstart (这是什么意思?)
        
 start        proc far        (定义伪指令far)
        push ds           (将ds压入堆栈,但它压到那个寄存器?)
        xor ax,ax       (异或,但这个有什么作用?结果为是多少?)
        push ax        (刚刚ds出经压入,现在压入ax,那么刚刚ds的数据在堆栈中是不是往下移?ax的数据是不是栈顶上?)
        mov ax,data      (将data的数据,移到ax中)
        mov ds,ax         (在将ax的内容移到数据段寄存器中)
        mov dx,offset bg (将bg的偏移量移给dx)
        mov ah,9      (把9移到ah.但不知道有什么作用?) 
        int 21h           (调中继21h,不知它有什么作用?)
        mov si,offset freq (将freq的偏移量移给si)
        mov bp,offset time  (将time的偏移量移给bp)
        call sing           (调用sing过程)
        mov ah,4ch     (将4c移到ah,但不知它有什么作用?)
        int 21h      (调中继21h,不知它有什么作用?)
 start        endp

以上注释是我自己解的,大家看看对不对?其中有很多不明白的,请麻烦帮我解解好吗?我将感激不尽!谢谢!

回复列表 (共4个回复)

沙发


mov ah,9      (把9移到ah.但不知道有什么作用?) 
        int 21h           (调中继21h,不知它有什么作用?)

mov ah,4ch     (将4c移到ah,但不知它有什么作用?)
        int 21h      (调中继21h,不知它有什么作用?)
这两个都是dos功能调用,前者是显示字符串;后者是返回dos,终止程序.还有好多功能,你查一下中断向量地址表和dos功能调用.

板凳

push ds           (将ds压入堆栈,但它压到那个寄存器?)
    将DS的内容压入堆栈段中,而不是某个寄存器,它是一个段。
xor ax,ax       (异或,但这个有什么作用?结果为是多少?)
   寄存器AX清0,看一下XOR指令在作用就知道了。
mov ax,data      (将data的数据,移到ax中)
mov ds,ax         (在将ax的内容移到数据段寄存器中)
    是将data所在的代码段的基地址放到AX中
其它的2楼一坐解释,就不再啰嗦了

3 楼

请先整理一下再发上来,最好不要用对齐格式,用缩进格式(既C语言格式)

4 楼


data        segment
 bg        db 0ah,0dh,"two tigers$"
 freq        dw 2 dup(262,294,330,262)
             dw 2 dup(330,349,392)
             dw 2 dup(392,440,392,349,330,262)
             dw 2 dup(294,196,262),0
 time       dw 1000 dup(2500),5000,2500,2500,5000    
            dw 2 dup(1200,1200,1200,1200,2500,2500)    
            dw 2 dup(2500,2500,5000)
 data        ends
 stack        segment para stack 'stack'
        dw 100 dup(?)
 stack        ends

 code        segment
        assume cs:code,ds:data,ss:stackstart   ;说明段和段寄存器之间的关系 
        
 start        proc far        (定义伪指令far)
        push ds           (将ds压入堆栈,但它压到那个寄存器?)
        xor ax,ax       ;ax清零
        push ax        ;将ax入栈
        mov ax,data      (将data的数据,移到ax中)
        mov ds,ax         (在将ax的内容移到数据段寄存器中)
        mov bx,offset bg (将bg的偏移量移给dx);相当于 lea  bx,bg取bg的地址给bx
        mov ah,9      
        int 21h           ;上面的两句话是显示字符串
        mov si,offset freq (将freq的偏移量移给si)
        mov bp,offset time  (将time的偏移量移给bp)
        call sing           (调用sing过程)
        mov ah,4ch     
        int 21h      
 start        endp
我只会这些。

我来回复

您尚未登录,请登录后再回复。点此登录或注册