偏移地址的应用

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. 首字母大写
ASSUME CS:code,DS:data
;  题目:data段中, 首字母大写

data SEGMENT
       DB '1. welcome to ma'
       DB '2. abc          '
       DB '3. Efg          '
       DB '4. mn           '
data ENDS

code SEGMENT
  start:        mov  ax,data
                mov  ds,ax

                mov  bx,0
                mov  si,3
                mov  cx,4

  convertLetter:mov  dl,ds:[bx+si]
                and  dl,11011111B
                mov  ds:[bx+si],dl
                add  bx,16
                loop convertLetter

                mov  ax,4C00H
                int  21h

code ENDS
END start
-u
0E28:0000 B8240E        MOV     AX,0E24
0E28:0003 8ED8          MOV     DS,AX
0E28:0005 BB0000        MOV     BX,0000
0E28:0008 BE0300        MOV     SI,0003
0E28:000B B90400        MOV     CX,0004
0E28:000E 8A10          MOV     DL,[BX+SI]
0E28:0010 80E2DF        AND     DL,DF
0E28:0013 8810          MOV     [BX+SI],DL
0E28:0015 83C310        ADD     BX,+10
0E28:0018 E2F4          LOOP    000E
0E28:001A B8004C        MOV     AX,4C00
0E28:001D CD21          INT     21
0E28:001F 03D2          ADD     DX,DX
-g 1A

AX=0E24  BX=0040  CX=0000  DX=004D  SP=0000  BP=0000  SI=0003  DI=0000
DS=0E24  ES=0E14  SS=0E23  CS=0E28  IP=001A   NV UP EI PL NZ NA PO NC
0E28:001A B8004C        MOV     AX,4C00
-d ds:0
0E24:0000  31 2E 20 57 65 6C 63 6F-6D 65 20 74 6F 20 6D 61   1. Welcome to ma
0E24:0010  32 2E 20 41 62 63 20 20-20 20 20 20 20 20 20 20   2. Abc
0E24:0020  33 2E 20 45 66 67 20 20-20 20 20 20 20 20 20 20   3. Efg
0E24:0030  34 2E 20 4D 6E 20 20 20-20 20 20 20 20 20 20 20   4. Mn
2. 每个字母都改为大写
ASSUME CS:code,DS:data,SS:stack
;  题目:data段中, 每个字母都改为大写

data SEGMENT
       DB '1. wel          '
       DB '2. abc          '
       DB '3. Efg          '
       DB '4. xYz          '
data ENDS

stack SEGMENT
        DW 0,0,0,0,0,0,0,0
        DW 0,0,0,0,0,0,0,0
stack ENDS


code SEGMENT
  start:mov  ax, stack
        mov  ss,ax
        mov  sp,32

        mov  ax,data
        mov  ds,ax
        mov  es,ax


        mov  bx,0
        mov  si,3
        mov  cx,4

  upCol:push cx
        push si

        mov  cx,3
        mov  si,3

  upRow:mov  dl, ds:[bx+si]
        and  dl,11011111B
        mov  es:[bx+si],dl
        inc  si
        loop upRow

        add  bx,16
        pop  si
        pop  cx
        loop upCol

        mov  ax,4C00H
        int  21h

code ENDS
END start
-u
0E2A:0000 B8280E        MOV     AX,0E28
0E2A:0003 8ED0          MOV     SS,AX
0E2A:0005 BC2000        MOV     SP,0020
0E2A:0008 B8240E        MOV     AX,0E24
0E2A:000B 8ED8          MOV     DS,AX
0E2A:000D 8EC0          MOV     ES,AX
0E2A:000F BB0000        MOV     BX,0000
0E2A:0012 BE0300        MOV     SI,0003
0E2A:0015 B90400        MOV     CX,0004
0E2A:0018 51            PUSH    CX
0E2A:0019 56            PUSH    SI
0E2A:001A B90300        MOV     CX,0003
0E2A:001D BE0300        MOV     SI,0003
-u
0E2A:0020 8A10          MOV     DL,[BX+SI]
0E2A:0022 80E2DF        AND     DL,DF
0E2A:0025 26            ES:
0E2A:0026 8810          MOV     [BX+SI],DL
0E2A:0028 46            INC     SI
0E2A:0029 E2F5          LOOP    0020
0E2A:002B 83C310        ADD     BX,+10
0E2A:002E 5E            POP     SI
0E2A:002F 59            POP     CX
0E2A:0030 E2E6          LOOP    0018
0E2A:0032 B8004C        MOV     AX,4C00
0E2A:0035 CD21          INT     21
0E2A:0037 A38413        MOV     [1384],AX
0E2A:003A 2E            CS:
0E2A:003B 8E1E0000      MOV     DS,[0000]
0E2A:003F 06            PUSH    ES
-g 32

AX=0E24  BX=0040  CX=0000  DX=005A  SP=0020  BP=0000  SI=0003  DI=0000
DS=0E24  ES=0E24  SS=0E28  CS=0E2A  IP=0032   NV UP EI PL NZ NA PO NC
0E2A:0032 B8004C        MOV     AX,4C00
-d es:0
0E24:0000  31 2E 20 57 45 4C 20 20-20 20 20 20 20 20 20 20   1. WEL
0E24:0010  32 2E 20 41 42 43 20 20-20 20 20 20 20 20 20 20   2. ABC
0E24:0020  33 2E 20 45 46 47 20 20-20 20 20 20 20 20 20 20   3. EFG
0E24:0030  34 2E 20 58 59 5A 20 20-20 20 20 20 20 20 20 20   4. XYZ
0E24:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
3. 不通过寄存器来确定数据的长度
; mov word ptr ds:[0],1 ; 将1当做字型数据放到ds中
-d ds:0
2000:0000  11 22 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-a
0DC0:0105 mov word ptr [0],3344
0DC0:010B
-r
AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=2000  ES=0DC0  SS=0DC0  CS=0DC0  IP=0105   NV UP EI PL NZ NA PO NC去11
0DC0:0105 C70600004433  MOV     WORD PTR [0000],3344               DS:0000=2211
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=2000  ES=0DC0  SS=0DC0  CS=0DC0  IP=010B   NV UP EI PL NZ NA PO NC
0DC0:010B 0000          ADD     [BX+SI],AL                         DS:0000=44
-d ds:0
2000:0000  44 33 00 00 00 00 00 00-00 00 00 00 00 00 00 00   D3..............


; inc word ptr ds:[bx]
-a
0DC0:010B inc word ptr [bx]
0DC0:010D
-d ds:0 F
2000:0000  44 33 00 00 00 00 00 00-00 00 00 00 00 00 00 00   D3..............
-r
AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=2000  ES=0DC0  SS=0DC0  CS=0DC0  IP=010B   NV UP EI PL NZ NA PO NC
0DC0:010B FF07          INC     WORD PTR [BX]                      DS:0000=3344
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=2000  ES=0DC0  SS=0DC0  CS=0DC0  IP=010D   NV UP EI PL NZ NA PO NC
0DC0:010D 0000          ADD     [BX+SI],AL                         DS:0000=45
-d ds:0 F
2000:0000  45 33 00 00 00 00 00 00-00 00 00 00 00 00 00 00   E3..............


; mov byte ptr ds:[0],11 ; 将11当做字节型数据放到dl中
; inc byte ptr ds:[0]    ; 自增1
-a
0DC0:010D mov byte ptr [0],11
0DC0:0112 inc byte ptr [0]
-r
AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=2000  ES=0DC0  SS=0DC0  CS=0DC0  IP=010D   NV UP EI PL NZ NA PO NC
0DC0:010D C606000011    MOV     BYTE PTR [0000],11                 DS:0000=45
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=2000  ES=0DC0  SS=0DC0  CS=0DC0  IP=0112   NV UP EI PL NZ NA PO NC
0DC0:0112 FE060000      INC     BYTE PTR [0000]                    DS:0000=11
-d ds:0 F
2000:0000  11 33 00 00 00 00 00 00-00 00 00 00 00 00 00 00   .3..............
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=2000  ES=0DC0  SS=0DC0  CS=0DC0  IP=0116   NV UP EI PL NZ NA PE NC
0DC0:0116 0000          ADD     [BX+SI],AL                         DS:0000=12
-d ds:0 F
2000:0000  12 33 00 00 00 00 00 00-00 00 00 00 00 00 00 00   .3..............
4. 综合运用
ASSUME CS:code,DS:data,SS:stack
;  题目:
;  公司名:'DEC'
;  总裁名:'Ken Olsen'
;  排名:137             改为:138
;  收入:40              改为:70
;  著名产品:'PDP'       改为:'VAX'

data SEGMENT
           DB 'DEC'
           DB 'Ken Olsen'      ; 前面有12字节
           DW 137              ; 0089   ; 位置是 12
           DW 40               ; 0028   ; 前面一个字, 位置是 14
           DB 'PDP'            ; 前面一个字, 位置是 16
data ENDS

stack SEGMENT
            DB 128 dup(0)      ; 8x16行0
stack ENDS

code SEGMENT
      start:mov ax, stack
            mov ss,ax
            mov sp,128

            mov ax,data
            mov ds,ax
            mov es,ax

            mov bx,0
            mov si,0

            mov word ptr ds:[bx+12],138
            mov word ptr ds:[bx+14],70
            mov byte ptr ds:[bx+si+16],'V'
            inc si
            mov byte ptr ds:[bx+si+16],'A'
            inc si
            mov byte ptr ds:[bx+si+16],'X'

            mov ax,4C00H
            int 21h

code ENDS
END start

-d ds:0 2F
0E24:0000  44 45 43 4B 65 6E 20 4F-6C 73 65 6E 89 00 28 00   DECKen Olsen..(.
0E24:0010  50 44 50 00 00 00 00 00-00 00 00 00 00 00 00 00   PDP.............

-d ds:0
0E24:0000  44 45 43 4B 65 6E 20 4F-6C 73 65 6E 8A 00 46 00   DECKen Olsen..F.
0E24:0010  56 41 58 00 00 00 00 00-00 00 00 00 00 00 00 00   VAX.............
Prev: 偏移地址 Next: 除法