回 帖 发 新 帖 刷新版面

主题:指令的应用……

以下是本人写的一段小程序,还没运行过,因为时间有限,望各位高手指点一下啊!谢谢了啊!

功能是将S1中的10个字节的内容,取出奇数字节的内容,并按相反的顺序存储在S3中。
datarea segment
  s1          db           "UAVBOCLDIE"
  s2          db           5 dup(?)
  s3          db       5 dup(?)
datarea ends                 
;********************************************************************
stack segment
    db          5 dup(?)
    top    label     byte
stack ends

code segment                 ;define code segment
;--------------------------------------------------------------------
main proc far
    assume cs:code,ds:datarea,ss:stack
start:                      ;starting execution address
;set up srack for return        
     push  ds               ;save old data segment
     sub  ax,ax            ;put zero in AX
     push  ax               ;save it on stack
;set DS register to current data segment
     mov ax,datarea         ;datarea segment addr
     mov ds,ax              ; into DS register
     
     mov  ax,stack
     mov  ss,ax
     mov  sp,offset top
;MAIN PART OF PROGRAM GOES HERE
     mov  cx,5
     lea  si,s1
     lea  di,s2
next:
     mov   al,[si]
     mov   [di],al
     add   si,2
     inc   di
     loop next
     push  [di]
     dec   di
     mov   si,0
     pop   s3[si]
     inc   si

     mov ah,09
     int 21h
     mov  ah,4ch
     int 21h
main endp                  ;end of main part of program
;----------------------------------------------------------------
code ends               ;end of code segment
;****************************************************************
     end start             ;end assembly

回复列表 (共2个回复)

沙发

修改后:(請高手指點一下啊!!不甚感激啊!)
datarea segment
  s1          db           "UAVBOCLDIE"
  s2          db           5 dup(?)
  s3          db       5 dup(?)
datarea ends                 
;********************************************************************
stack segment
    db          5 dup(?)
    top    label     byte
stack ends

code segment                 ;define code segment
;--------------------------------------------------------------------
main proc far
    assume cs:code,ds:datarea,ss:stack
start:                      ;starting execution address
;set up srack for return        
     push  ds               ;save old data segment
     sub  ax,ax            ;put zero in AX
     push  ax               ;save it on stack
;set DS register to current data segment
     mov ax,datarea         ;datarea segment addr
     mov ds,ax              ; into DS register
     
     mov  ax,stack
     mov  ss,ax
     mov  sp,offset top
;MAIN PART OF PROGRAM GOES HERE
     mov  cx,5
     lea  si,s1
     lea  di,s2
next:
     mov   al,[si]
     mov   [di],al
     add   si,2
     inc   di
     loop next
L1:   
      push    [di]
      loop     L1
      mov   dl ,0ah
  mov   ah,2
  int     21h  ;输出换行
      mov  dl,0dh 
      int     21h ;输出回车
  mov   cx,5

L2:    
     pop   s3[si]
     inc    si
     mov  ah,2
     int 21h
     loop   L2
    
     mov  ah,4ch
     int 21h
main endp                  ;end of main part of program
;----------------------------------------------------------------
code ends               ;end of code segment
;****************************************************************
     end start             ;end assembly

板凳

datarea segment
  s1          db           "UAVBOCLDIE"
  s2          db           5 dup(?)
  s3    db           5 dup(?)
datarea ends                 
;********************************************************************

code segment                 ;define code segment
;--------------------------------------------------------------------
main proc far
    assume cs:code,ds:datarea
start:                      ;starting execution address
;set up srack for return        
     push  ds               ;save old data segment
     sub  ax,ax            ;put zero in AX
     push  ax               ;save it on stack
;set DS register to current data segment
     mov ax,datarea         ;datarea segment addr
     mov ds,ax              ; into DS register
     
;MAIN PART OF PROGRAM GOES HERE
     mov  cx,5
     lea  si,s1
     lea  di,s2
next:
     mov   al,[si]
     mov   [di],al
     add   si,2
     inc    di
     loop  next
     
     lea  si,s2
     lea  di,s3
     mov  cx,5

     mov  dl,[si+4]            ///從這里到后面有什么方法改進的嗎?
     mov  [di],dl   
     mov  ah,2
     int  21h
     
     mov  dl,[si+3]
     mov  [di],dl   
     mov  ah,2
     int  21h
     
     mov  dl,[si+2]
     mov  [di],dl   
     mov  ah,2
     int  21h
 
     mov  dl,[si+1]
     mov  [di],dl   
     mov  ah,2
     int  21h
 
     mov  dl,[si]
     mov  [di],dl   
     mov  ah,2
     int  21h

     mov  ah,4ch
     int 21h
main endp                  ;end of main part of program
;----------------------------------------------------------------
code ends               ;end of code segment
;****************************************************************
     end start             ;end assembly


這個程序的功能我是實現了,不過////那里能不能有什么改進呢?

我来回复

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