16位汇编学习记录总结(4)

第二十四节

 

顺序程序设计

 

data segment

bcd_buf db 96h

asc_buf db 2 dup(?)

data ends

code segment

 

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov al,bcd_buf

mov bl,al

mov cl,4

shr al,cl

add al,30h

mov asc_buf,al

and bl,0fh

add bl,30h

mov asc_buf+1,bl

code ends

end start

 

换码指令 

XLAT ;寄存器(BX+AL)内容---->AL   BX为表的首地址

 

MOV AH,4CH ;返回到DOS状态,返回主程序

INT 21H

 

data segment

tab db 1,4,9,16,25,36,49,64,81

db 100,121,144,169,225

a db 12

b db ?

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov bx,offest tab

mov al,a

xlat

mov b,al

mov ah,4ch

int 21h

code ends

end start

 

五,分支程序设计

 

data segment

source db x1,x2

max db ?

data ends

code segment

assume: cs:code,ds:data

start:

mov ax,source

mov max,ax

cmp ax,source+1

jnc one

mov al,source+1

one: mov max,al

code ends

end start

 

条件转移指令:都是段内转移,不影响标志

JO  

JNO

JZ

JNZ

 

有符号数间的次序关系

G(大于)  E(等于)  L(小于)

无符号间的次序关系称为

A(高于) E(等于) B(低于)

 

CMP  AX,BX

OF =0   SF=0 AX>BX

OF = 1 SF=1 AX<BX

 

第二十五节

 

五、分支程序设计

分支语句习题练习

HLT   停机

 

data segment

xx db x

yy db ?

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov al,xx

cmp al,0

jge begin

mov yy,0ffh

hlt

begin: je one

mov yy,1

hlt

one: mov yy,0

hlt

code ends

end start

 

---------------------------------------------------

比较BUFFER中三个数据,按由大到小排序

data segment

buffer db 87,234,123

data  ends

codes segment

assume cs:codes,ds:data

mov ax,cx

mov ds,ax

mov si,offset buffer

mov al,[si]

mov bl,[si+1]

mov cl,[si+2]

cmp al,bl

jae next1

xchg al,bl

 

next1: cmp al,cl

jae next2

xchg al,cl

next2 cmp bl,cl

jae next3

xchg bl,cl

next3: mov [si],al

mov [si+1],bl

mov [si+2],cl

mov ah,4ch

int 21h

code ends

end start

--------------------------------------------------

六、循环程序设计

通常由四部分组成:

1,初始化部分

2,循环体部分

3,调整部分

4,控制部分

 

习题:

在所定义的字节数组中找出第一个非0数据,并显示输出其所在数组的下标

data segment

array db 0,0,0,16,0,88,72,0,35,42,99

count equ $-array

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov cx,count

mov di,-1

again: inc di

cmp arry[di],0

loopz again

mov dx,di

or dl,30h ;转换为ASCII

display:

mov ah,02h

int 21h

mov ah,4ch

int 21h

code ends

end start

-------------------------------------------------------------------

双重循环:

;;从内存BUF单元开始存放有256字节的数据块,统计该数据块中,

;;所有位为‘1’的个数

 

data segment

buf db 15h,36h...,03h,7fh

count dw 0

data ends

code segment

assumecs:code,ds:data

start: mov ax,data

mov ds,ax

mov si,offset buf

mov cx,c256

xor bx,bx

rept0: mov dh,08

mov al,[si]

rept1: ror al,1

jnc next

inc bx

next1: dec dh

jnz rept1

inc si

loop rept0

mov count,bx

mov ah,4ch

int 21h

code ends

end start

-----------------------------------------------------------------

;字符大小写转换

data segment

str db 'how are yoU !',0

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov si,offset str

again: mov al,[si]

or al,al

jz ok

cmp al,'A'

jb next

cmp al,'Z'

ja next

add al,20h

mov [si],al

next: inc si

jmp again

ok: mov ax,4c00h

int 21h

code ends

end start

 

1,数值相关伪指令

正常汇编中数据默认为10进制数,

RADIX 16

更改默认数据为16进制数,

RADIX 16

MOV AX,23d

2,十六进制常数

必须以数字开头,字母H结尾   

MOV AX,0FAH

 

3,二进制常数

字母B结尾

TEST BL,0010100B

 

4,八进制数

字母Q结尾

127Q

 

5,字符串常数

用引号括起来的一个或多个字符

A’  值是41H

"ab"值是6162H

 

算数运算符

+

-

*

/

MOD  (模)求余

ADD100*4+2

 

关系运算符

EQ 相等

NE 不等

LT 小于

GT   大于

LE 小于等于

GE   大于或等于

运算结果是一个数字值

成立 0FFFFH

不成立 0

 

MOV AX,1234H  GT  1023H

 

逻辑运算符

AND

OR

XOR

NOT

SHL

SHR

结果是一个数值

 

 

数值表达式中的操作符

HIGH 结果是数值表达式的高8 MOV AX,HIGH(1234H+5)    AX=1239H

LOW 结果是数值表达式的低8

LENGTH

SIZE

OFFSET

SEG

TYPE

WEDTH

MASK

 

运算符和操作符的优先级

由高到低:

1)圆括号,尖括号(记录中),方括号,原点符(结构中)

LENGTH,SIZE,WIDTH,MASK

2PTR,OFFSET,SEG,TYPE,THIS,冒号(段超越)。属性操作符

3*/MOD,SHL,SHR

4HIGH,LOW

5+-

6EQ,NE,LT,LE,GT,GE

7NOT

8AND

9OR,XOR

10SHORT

 

 

 

--------------------------------------

练习:

radix 16

mov ax,13d

mov ax,89

radix 2

 

mov ax,1234h gt 1024h  

mov bx,1234h+5 lt 1024h  

 

 

posted @ 2012-12-19 10:19  不懂事的计算机  阅读(300)  评论(0编辑  收藏  举报