Ⅰ 如何编写最简单的汇编语言
了解计算机CPU原理:详情请参照“80X86计算机组织”和“80X86的指令系统和寻址方式”
求表达式Y=A*X+B-C的值,已知A、B、C分别存放在DA-1、DA-2、DA-3字节单元,它们的值分别是:5 、 6、 7,X存放在INPUT字节单元,结果Y放入JSJ_10字节单元。
分析顺序结构程序代码:由记事本敲出来的
data segment da_1 db 5 da_2 db 6 da_3 db 7 input db 1 jsj_10 db 0data ends ;这一段在内存中定义了一个段,叫做data,并且其中存入了5个变量并且付入初值,db代表每个变量占用1个字节,若是dd则为字,为2个字节code segment ;名字叫做code的段的定义,显然这儿作为代码段,当然code这个名字可以更改 assume cs:code,ds:data ;指定data为DS数据段,code为CS代码段start: mov ax,data ;加法指令 mov ds,ax ;加法指令 mov al,da_1 ;加法指令
mov bl,input ;加法指令
mul bl ;乘法 add al,da_2 sub al,da_3 ;减法 mov jsj_10,al
exit: mov ah,4ch int 21h ;这两行相当于ret(返回值),就像C语言中的return 0;
code ends end start
注释: XXXX segment
.............
XXXX ends ;定义一个段
assume ds:XXXX 把XXXX段指定为ds(ds是段地址寄存器)
请先提前把masm edit debug link文件放入预定的文件夹,并把编写的xxxx.asm代码文件放入该文件夹,asm文件可用记事本写成,并改格式txt为asm(有的看不到文件后缀.txt的请参照网络)
Ⅱ 简单汇编语言实例
(1)判断双字的高位字是不是1,如果不是,直接返回
(2)清除进位标志
(3)将低字求反,然后 +1
(4)将进位保存起来
(5)将高位字求反,加上刚才的进位
--------------
XXXX:
MOV AX, X + 1 ;取 X 的高位字
CMP AX, 32768
JB X_EXIT ;是正数就跳转
MOV AX, X ;取 X 的低位字
XOR AX, 0FFFFH ;取反
ADD AX, 1
PUSHF
MOV X, AX
MOV AX, X + 1 ;取X 的高位字
XOR AX, 0FFFFH ;取反
POPF
ADC AX, 0
MOV X + 1, AX
X_EXIT:
RET