AndOr

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. AND OR
ASSUME CS:code,DS:data,SS:stack

data SEGMENT
       DB 'ABcDEF'
       DB 'GhiJkm'
data ENDS

stack SEGMENT stack         ; 注意这里再写一次 stack
        DW 0,0,0,0,0,0,0,0
        DW 0,0,0,0,0,0,0,0
        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, data
          mov  ds, ax

          mov  ax, data
          mov  es, ax

          mov  cx,6
          mov  bx,0

  toSmall:mov  dl, ds:[bx]
          or   dl,00100000B (20H)
          mov  es:[bx],dl
          inc  bx
          loop toSmall

          mov  cx,6
          mov  bx,6
  toBig:  mov  dl, ds:[bx]
          and  dl,11011111B (DFH)
          mov  es:[bx],dl
          inc  bx
          loop toBig

          mov  ax,4C00H
          int  21h
code ENDS

END start

; or  逻辑或运算,二进制位都为0时,才为0,否则为1
; and 逻辑与运算,二进制位都为1时,才为1,否则为0

; 65 41H  A  0100 0001
;        or  0010 0000    ; 将字符的第五位转换成1,即可将大写转换成小写字母
; 97 61H  a  0110 0001
;        or  0010 0000
;            0110 0001    ; 小a不变

; 66 42H  B  0100 0010
;        or  0010 0000
; 98 62H  b  0110 0010
;        or  0010 0000
;            0110 0010    ; 小b不变

; 99 63H  c  0110 0011
;        or  0010 0000
;            0110 0011

; 108 6CH  i  0110 1001
;       and   1101 1111   ; 将字符的第五位转换成0,即可将小写转换成大写字母
; 73  49H  I  0100 1001
;       and   1101 1111
;             0100 1001

; 97(a) - 65(A) = 32 = 20H
; 'A' + 20H = 'a'

; 总结:
; or:  0010 0000 非第5位,对面位是 0 or 之后还是 0, 对面是 1 or 之后还是 1
;                  第5位, 对面是01,对面是1不变
; and: 1101 1111 非第5位,对面位是 0 and 之后还是 0, 对面是 1 and 之后还是 1
;                  第5位, 对面是10,对面是0不变
2. 字符型数据定义
ASSUME CS:code,DS:data,SS:stack

data SEGMENT
             DB 'hello tom'
data ENDS

stack SEGMENT stack                     ; 注意这里再写一次 stack
              DW 0,0,0,0,0,0,0,0
              DW 0,0,0,0,0,0,0,0
              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, data
              mov ds, ax

              mov ax, stack
              mov ss,ax

              mov al,'a'
              mov dl,'b'


              mov ax,4C00H
              int 21h
code ENDS

END start
-d ds:0
0E24:0000  68 65 6C 6C 6F 20 74 6F-6D 00 00 00 00 00 00 00   hello tom.......
0E24:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0E24:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0E24:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0E24:0040  00 00 00 00 00 00 00 4C-00 00 0D 00 29 0E 21 08   .......L....).!.
0E24:0050  B8 24 0E 8E D8 B8 25 0E-8E D0 B8 00 4C CD 21 03   .$....%.....L.!.
0E24:0060  D2 26 8B 3E 4E 13 8C D8-83 FF 00 74 1D 8E DF 8B   .&.>N......t....
0E24:0070  36 04 00 8B 3E 00 00 03-F6 74 ED 8B 5C 0E E8 12   6...>....t..\...
-d ss:0
0E25:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0E25:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0E25:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0E25:0030  00 00 00 00 00 00 00 4C-00 00 0D 00 29 0E 21 08   .......L....).!.
0E25:0040  B8 24 0E 8E D8 B8 25 0E-8E D0 B8 00 4C CD 21 03   .$....%.....L.!.
0E25:0050  D2 26 8B 3E 4E 13 8C D8-83 FF 00 74 1D 8E DF 8B   .&.>N......t....
0E25:0060  36 04 00 8B 3E 00 00 03-F6 74 ED 8B 5C 0E E8 12   6...>....t..\...
0E25:0070  0B 73 07 83 EE 02 75 F3-EB DE 8B DA 03 1E 06 00   .s....u.........
Prev: 栈空间 Next: 偏移地址