当前位置: 代码迷 >> 汇编语言 >> 王爽汇编书上的一个有关问题
  详细解决方案

王爽汇编书上的一个有关问题

热度:9465   发布时间:2013-02-26 00:00:00.0
王爽汇编书上的一个问题,求助
代码一:
Assembly code
assume cs:cde,ds:dta,ss:stkdta segment    dw 0123h,0456h,0789h,0987h,0abch,0fedh,0edfh,0defhdta endsstk segment    dw 0,0,0,0,0,0,0,0stk endscde segmentstart:mov ax,stk        mov ss,ax        mov sp,16                mov ax,dta        mov ds,ax                push ds:[0]        push ds:[2]        pop ds:[2]        pop ds:[0]                mov ax,4c00h        int 21h        cde endsend start

代码二:
Assembly code
assume cs:code,ds:data,ss:stackdata segment    dw 1023h,0456hdata endsstack segment    dw 0,0stack endscode segmentstart:    mov ax,stack    mov ss,ax    mov sp,16    mov ax,data    mov ds,ax    push ds:[0]    push ds:[2]    pop ds:[2]    pop ds:[0]    mov ax,4c00h    int 21hcode endsend start

代码三:
Assembly code
assume cs:code,ds:data,ss:stackcode segmentstart:    mov ax,stack    mov ss,ax    mov sp,16        mov ax,data    mov ds,ax    push ds:[0]    push ds:[2]    pop ds:[2]    pop ds:[0]    mov ax,4c00h    int 21hcode endsdata segment    dw 0123h,0456hdata endsstack segment    dw 0,0stack endsend

如果将代码一,代码二,代码三中的最后一条伪指令end start改为 end(也就是不指明程序的入口),则哪个程序仍然可以正确执行?请说明理由。

我用masm5.0 编译连接以后,发现没什么异常啊,好像都能运行,怎么回事?

------解决方案--------------------------------------------------------
你搞多代码段试一下。不要只有一个code segment。

自己动手才记得牢

------解决方案--------------------------------------------------------
代码三可以正常运行了。因为没有指明程序的入口,代码一和二会把数据段,栈段看成程序。1L意思是让你多写几段程序。
------解决方案--------------------------------------------------------
探讨
代码一:

Assembly code
assume cs:cde,ds:dta,ss:stk
dta segment
dw 0123h,0456h,0789h,0987h,0abch,0fedh,0edfh,0defh
dta ends
stk segment
dw 0,0,0,0,0,0,0,0
stk ends
cde segment
start:mov……

------解决方案--------------------------------------------------------
第一个第二个绝对不能正常运行,LZ 你重新试一下

确定先去掉start,然后用debug打开程序,用u命令一看程序内容就知道了

  相关解决方案