068-Assembly汇编05


1.and指令
mov al,00001111B
and  al,00111100B
那么
al=00001100B
也就是 与&


2.or指令
同理
mov al,00001111B
or    al,00000000B
那么
al=00001111B
也就是 或|

3.设置al的第0位为0
那么可以这样
and al, 11111110B
第1位为0
and al, 11111101B
第2位为0
and al, 11111011B

4.ASCII
0011 0000    48    0x30    0    字符0
0011 0001    49    0x31    1    字符1
0011 0010    50    0x32    2    字符2
0011 0011    51    0x33    3    字符3
0011 0100    52    0x34    4    字符4
0011 0101    53    0x35    5    字符5
0011 0110    54    0x36    6    字符6
0011 0111    55    0x37    7    字符7
0011 1000    56    0x38    8    字符8
0011 1001    57    0x39    9    字符9
                
0100 0001    65    0x41    A    大写字母A
0100 0010    66    0x42    B    大写字母B
0100 0011    67    0x43    C    大写字母C
0100 0100    68    0x44    D    大写字母D
0100 0101    69    0x45    E    大写字母E
0100 0110    70    0x46    F    大写字母F
0100 0111    71    0x47    G    大写字母G
0100 1000    72    0x48    H    大写字母H
0100 1001    73    0x49    I    大写字母I
0100 1010    74    0x4A    J    大写字母J
0100 1011    75    0x4B    K    大写字母K
0100 1100    76    0x4C    L    大写字母L
0100 1101    77    0x4D    M    大写字母M
0100 1110    78    0x4E    N    大写字母N
0100 1111    79    0x4F    O    大写字母O
0101 0000    80    0x50    P    大写字母P
0101 0001    81    0x51    Q    大写字母Q
0101 0010    82    0x52    R    大写字母R
0101 0011    83    0x53    S    大写字母S
0101 0100    84    0x54    T    大写字母T
0101 0101    85    0x55    U    大写字母U
0101 0110    86    0x56    V    大写字母V
0101 0111    87    0x57    W    大写字母W
0101 1000    88    0x58    X    大写字母X
0101 1001    89    0x59    Y    大写字母Y
0101 1010    90    0x5A    Z    大写字母Z
0101 1011    91    0x5B    [    开方括号
0101 1100    92    0x5C    \    反斜杠
0101 1101    93    0x5D    ]    闭方括号
0101 1110    94    0x5E    ^    脱字符
0101 1111    95    0x5F    _    下划线
0110 0000    96    0x60    `    开单引号
0110 0001    97    0x61    a    小写字母a
0110 0010    98    0x62    b    小写字母b
0110 0011    99    0x63    c    小写字母c
0110 0100    100    0x64    d    小写字母d
0110 0101    101    0x65    e    小写字母e
0110 0110    102    0x66    f    小写字母f
0110 0111    103    0x67    g    小写字母g
0110 1000    104    0x68    h    小写字母h
0110 1001    105    0x69    i    小写字母i
0110 1010    106    0x6A    j    小写字母j
0110 1011    107    0x6B    k    小写字母k
0110 1100    108    0x6C    l    小写字母l
0110 1101    109    0x6D    m    小写字母m
0110 1110    110    0x6E    n    小写字母n
0110 1111    111    0x6F    o    小写字母o
0111 0000    112    0x70    p    小写字母p
0111 0001    113    0x71    q    小写字母q
0111 0010    114    0x72    r    小写字母r
0111 0011    115    0x73    s    小写字母s
0111 0100    116    0x74    t    小写字母t
0111 0101    117    0x75    u    小写字母u
0111 0110    118    0x76    v    小写字母v
0111 0111    119    0x77    w    小写字母w
0111 1000    120    0x78    x    小写字母x
0111 1001    121    0x79    y    小写字母y
0111 1010    122    0x7A    z    小写字母z


5.ASCII主要
十进制    十六    字母
48    0x30    0
57    0x39    9
65    0x41    A
90    0x5A    Z
97    0x61    a
122    0x7A    z

        
        
6.示例
assume ds:data
data segment
    db 'apple'
data ends

code segment
start:
    mov al,'a'
    mov bl,'b'
    
    mov ax,4c00H
    int 21H
code ends
end start        
        
        
        
        
7.ASCII重要
48    0x30    0
65    0x41    A
97    0x61    a

9就是57,39H
Z就是90,5AH
z就是122,7AH

8.大小写转换
大写转小写就是 +20H
小写转大写就是 -20H        
        


9.大小写转换
如果看字母的二进制的话我们发现
大写和小写的二进制其实除了第5位,都是一样的,大写的是为0,小写的是1
比如
A    0100 0001
B    0100 0010
C    0100 0011
D    0100 0100
---
a    0110 0001
b    0110 0010
c    0110 0011
d    0110 0100
我们发现,只有第5位不同,其他都一样
所以如果是
大写转小写,第5位的0变成1
小写转大写,第5位的1变成0

OK,示例
mov al,0100 0001H (al是A)
or     al,0010 0000H
or了之后,al变成了0110 0001H
也就是a

示例2
mov al,0110 0001H (al是a)
and  al,1101 1111H
and了之后,al变成0100 0001H
也就是A

        
        
        
        
10.SI和DI
SI和DI是8086的两个与bx功能相似的寄存器,但是SI和DI不能分成2个8位寄存器来使用
示例
1.
    mov bx,0
    mov ax,[bx]
2.
    mov si,0
    mov ax,[si]
3.
    mov di,0
    mov ax,[di]


11.示例
1.
    mov bx,0
    mov ax,[bx+10]
2.
    mov si,0
    mov ax,[si+10]
3.
    mov di,0
    mov ax,[di+10]
        
        
        
        

13.问题: 字符串复制
assume cs:code,ds:data
data segment
    db 'hello world'
    db '...'
data ends

code segment
start:
    mov ax,data
    mov ds,ax
    mov si,0
    mov di,11
    mov cx,5
s:
    mov ax,[si]
    mov [di],ax
    add si,2
    add di,2
    loop s

    mov ax 4c00H
    int 21H
code ends
end start        
        
        
        
        
        
14.方法精简
code segment
start:
    mov ax,data
    mov ds,ax
    mov si,0
    mov cx,8
s:
    mov ax,0[si]
    mov 16[si],ax
    add si,2
    loop s

    mov ax,4c00H
    int 21H
code ends
end start


        
        
        
        
        
        
15.案例
将data中的每个单词的头字母改成大写
assume cs:code,ds:data
data segment
    db '1.file    '
    db '2.edit '
    db '3.search'
data ends

code segment
start:
    ...
code ends
end start        
        
代码
code segment
start:
    mov ax,data
    mov ds,ax
    mov bx,0
    mov cx,6
s:
    mov al,[bx+2]
    and  al,1101 1111H    
    mov [bx+3], al
    add bx,16
    loop s
    
    mov ax,4c00H
    int 21H    
        
        
        
        
        
        
        
16.案例
将data段中的每个单词改为大写
assume cs:code,ds:data
data segment
    db 'apple'
    db 'apple'
    db 'apple'
data ends

code segment
start:    
    mov ax,data
    mov ds,ax
    mov bx,0
    mov cx,3
s0:
    mov si,0
    mov cx,3
s:
    mov al,[bx+si]
    and al,1101 111B
    mov [bx,si],al
    inc si
    loop s
    
    add bx,16
    loop s0

    mov ax,4c00H
    int 21H
code ends
end start         
(以上代码有误)
下面修改        
        
        
        
        
17.        
assume cs:code,ds:data
data segment
    db 'apple'
    db 'apple'
    db 'apple'
data ends

code segment
start:    
    mov ax,data
    mov ds,ax
    mov bx,0
    mov cx,3
s0:
    mov dx,cx
    mov si,0
    mov cx,3
s:
    mov al,[bx+si]
    and al,1101 111B
    mov [bx,si],al
    inc si
    loop s
    
    add bx,16
    mov cx,dx
    loop s0

    mov ax,4c00H
    int 21H
code ends
end start             
        
        
        
        
        
        
18.改进方案,使用内存
看看改进的程序
code segment
start:
    mov ax,data
    mov ds,ax
    mov bx,0
    mov cx,3
s0:
    mov ds:[40H],cx
    mov si,0
    mov cx,3
s:
    mov al,[bx,si]
    and al,1101 1111B
    mov [bx+si],al
    inc si
    loop s

    mov ax,004cH
    int 21H


19.用栈来改进
start:
    mov ax,stack
    mov ss,ax
    mov sp,16
    mov ax,data
    mov ds,ax
    mov bx,0
    mov cx,3
s0:
    push cx
    mov si,0
    mov cx,3
s:
    mov al,[bx+si]
    and al,1101 1111B
    mov [bx+si],al
    inc si
    loop s

    add bx,16
    pop cx
    loop s0

    mov ax,4c00H
    int 21H
code ends
        
        
        
        
        
        
        
20.案例
将data中每个单词的前4个字母改成大写字母
        
        
        

发布了1081 篇原创文章 · 获赞 42 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_33781658/article/details/104585925
068