汇编语言

强颜欢笑 提交于 2020-01-15 05:59:41

1.8086的寻址方式

1.1 立即数寻址方式

1.2 寄存器寻址方式

1.3 存储器寻址方式

1.4 数据寻址寻址方式

2.8086 指令系统

2.1 数据传送指令

MOV(传送指令)
XCHG(交换指令)
XLAT(换码指令)
PUSH(进栈指令)
POP(出栈指令)
LAHF(标志送AH指令)
SAHF(AH送标志指令)
PUSHF(标志进栈指令)
POPF(标志出栈指令)
LEA (有效地址传送指令)
LDS/LES(指针传送指令)

2.2算数运算类指令

CF(进位指令)
OF(溢出指令)
INC(增量指令)
DEC(减量指令)

ADD(加法指令)
SUB(减法指令)
MUL(无符乘法指令)
IMUL(有符乘法指令)
DIV(无符除法指令)
IDIV(有符除法指令)



2.3位操作指令

逻辑运算指令:
AND(逻辑与指令)
OR(逻辑或指令)
XOR(逻辑异或指令)
NOT(逻辑非指令)
移位运算指令(Shift+Logcal/Arithmetic):
shl(逻辑左移)
shr(逻辑右移)
sal(算数左移)
sar算数右移)

循环移位指令(Rotate):
rol(不带进位左移)
ror(不带进位右移)
rcl(带进位左移)
rcr(带进位右移)

2.4控制转移指令

无条件转移指令
条件转移指令
循环指令
子程序指令

2.5处理机控制类指令

NOP  (空操作指令)
SEG(超前越前缀指令)
LOCK(封锁前缀指令)
HLT(暂停指令)
ESC(交权指令)
WAIT(等待指令)

3.汇编语言程序格式

3.1 参数、变量和符号

3.2 复杂数据结构

3.2 汇编语言程序开发

程序结构:
代码段
数据段
堆栈段

程序题:

汇编语言:求最大值

assume cs:code ,ds:data
data  segment
  buffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902, 14255
         dw 40623, 47645, 15575, 51572, 18110, 26511, 14880, 5921, 31999
         dw 2893, 21056, 16574, 147, 25532, 33336, 5251, 64269, 31514, 23670
         dw 53335, 49581, 57895, 25689, 51697, 58198, 27548, 54151, 41373
         dw 44382, 23511, 39326, 56955, 51911
    max  dw ?
data ends 

code segment 
start :  
    mov ax,data
    mov ds,ax
    mov cx,offset max-offset buffer
    shr cx,1 ;cx右移一位,个数减半    
    mov bx,0

    dec cx
    mov ax,[bx] ;先将ax放入第一个数据
    inc bx
    inc bx
 s: cmp ax,[bx]
    jae next    ;若ax>=[bx]则跳转到next
    mov ax,[bx] ;若ax<[bx]则将ax换成现在最大的。
next:inc bx
    inc bx      ;向后移动一个数据
    loop s
    mov  max,ax

    mov ax,4c00h
    int 21h
code ends 
end start

统计二进制中1的个数(汇编)

data segment
    str db 'the result is:$'
data ends  
 
 
code segment
    assume cs:code,ds:data
start:
    mov ax,data         
    mov ds,ax
    
    mov dx,offset str
   
    mov ah,09h    ;输出字符串的功能,但是使用前必须将字符串的地址放到dx中  lea dx str 或者 mov dx,offset str
    int 21h
    
    mov ax,0ffffh ;初始化
    mov cx,16      ;循环变量
    mov dl,0       ;统计1的个数
    
next:
    
    rol ax,1     ;循环左移    
    
    jnc next1    ;表示cf=0,则跳转到next1
    
    inc dl     ;计数
next1:
    dec cx
    jnz next
    
    mov al,dl
    aam        ;调整
    
    push ax     ;先将这个ax的值保存在栈中
    
    mov dl,ah     ;查看高位的值
    add dl,30h   ;数字+30h编程字母  0的ASCII码30h
    mov ah,02h     ;ah放2,是2号功能,字符输出,并且要输出的字符是已经放在dl里面的
    int 21h
    
    pop ax
    mov dl,al
    add dl,30h 
    
    mov ah,02h
    int 21h
    
code ends
    end start
    
     

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!