汇编语言实现2个任意数相加

D A TAS SEGMENT
X DB 100 DUP(?)
Y DB 100 DUP(?)
Z DB 100 DUP(?),'$';此处输入数据段代码
DA TAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,0
DA TAX:
MOV AH,01H ;01回显,将数据存放在AL中
INT 21H
CMP AL,'+' ;"+"与输入的数据相减是否为0,即用“+作为X的结束标志”
JZ A1 ;判断,为0时,跳转A1,不为0,执行下一条语句
PUSH AX ;将AX整个16位(包括AH,AL)一起进栈
INC BX ;计数
JMP DATAX ;循环将X的每个位依次输入
A1:
MOV CX,BX
MOV SI,0
A11:
POP AX ;将AX内的数据出栈
MOV X[SI],AL ;将AL的数据保存到X段中
INC SI
LOOP A11 ;依次循环保存
MOV BX,0
DATAY:
MOV AH,01H
INT 21H
CMP AL,'='
JZ A2
PUSH AX
INC BX
JMP DATAY
A2:
MOV CX,BX
MOV SI,0
A12:POP AX
MOV Y[SI],AL
INC SI
LOOP A12 ;同理,此处是以"="作为Y值的结束标志,输入Y值并保存在Y段
RESULT:
CLC
PUSHF ;CF先进栈
MOV CX,100
MOV SI,0
MOV DI,99
A3:
MOV AL,X[SI] ;将X段数据放在AL中
MOV DL,Y[SI] ;将X段数据放在DL中
POPF
ADC AL,DL ;考虑进位运算,AL+DL+CF
AAA
PUSHF
ADD AL,30H ;转换成ASCII码
MOV Z[DI],AL ;将结果从第99位倒着保存到Z段中
INC SI
DEC DI
LOOP A3 ;依次循环将结果保存到Z段
MOV SI,0
A4:
CMP Z[SI],30H
JNZ A5
INC SI
JMP A4 ;从第0位开始判断,看Z[SI]中的数据是否为0
A5:
LEA DX,Z[SI]
MOV AH,09H ;直到不为0的数据那一位是开始显示到第99位
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END ST。

合集下载

两个十进制数相加的汇编程序

两个十进制数相加的汇编程序

两个十进制数相加的汇编程序汇编语言是一种底层的编程语言,用于编写计算机的指令集。

在汇编语言中,可以使用指令来执行加法操作。

下面是一个用汇编语言编写的程序,用于将两个十进制数相加。

1. 首先,我们需要将两个十进制数保存在内存中。

假设第一个数为A,第二个数为B。

我们可以使用数据段来定义这两个数,并将它们存储在内存中的某个位置。

例如,我们可以将A存储在内存的地址1000处,将B存储在内存的地址1004处。

2. 接下来,我们需要使用寄存器来执行加法操作。

我们可以使用通用寄存器来保存结果。

假设我们将结果保存在寄存器AX中。

3. 首先,将A加载到AX寄存器中。

我们使用MOV指令将A从内存加载到AX 寄存器。

指令为:MOV AX, [1000]。

这将从内存地址1000处读取数据,并将其存储在AX寄存器中。

4. 接下来,将B加载到BX寄存器中。

我们使用MOV指令将B从内存加载到BX寄存器。

指令为:MOV BX, [1004]。

这将从内存地址1004处读取数据,并将其存储在BX寄存器中。

5. 现在,我们需要将AX和BX寄存器中的值相加,并将结果保存在AX寄存器中。

我们使用ADD指令执行加法操作。

指令为:ADD AX, BX。

这将将AX寄存器和BX寄存器中的值相加,并将结果存储在AX寄存器中。

6. 最后,我们可以将结果从AX寄存器中写回内存。

我们使用MOV指令将结果从AX寄存器写回内存。

指令为:MOV [1008], AX。

这将将AX寄存器中的值写回内存地址1008处。

7. 程序结束后,我们可以从内存地址1008处读取结果,并将其输出。

这是一个简单的汇编程序,用于将两个十进制数相加。

程序首先将两个数加载到寄存器中,然后执行加法操作,并将结果存储在寄存器中,最后将结果写回内存。

请注意,这只是一个示例程序,实际的汇编程序可能会更加复杂,并考虑到输入的错误处理和边界情况。

汇编语言指令大全

汇编语言指令大全
加法指令 ADD(Addition) 格式: ADD OPRD1,OPRD2 功能: 两数相加
逻辑与运算指令 AND 格式: AND OPRD1,OPRD2 功能: 对两个操作数实现按位逻辑与运 算,结果送至目的操作数.本指令可以进 行字节或字的‘与’运算, OPRD1<--OPRD1 and OPRD2.
功能: 对两个未组合十进制数相减后存 若(AL) and 0FH > 9 或 AF=1
格式: AAS
2. 调整操作
Adjust for Subtraction)
1. 本指令影响标志位 CF 及 AF.
未组合十进制减法调整指令 AAS(ASCII 说明:
个位数).
的 AL 内容是乘积被 10 整除的余数(即
合十进制数进行调整,以便能用 DIV 指令 在 AH 中.
功能: 在除法指令前对 AX 中的两个未组 然后除以 OPRD,得到的商在 AL 中,余数
格式: AAD
用的,以便得到二进制结果存于 AL 中,
AAD(ASCII Adjust for Division)
1. AAD 指令是在执行除法 DIV 之前使
跑佑十飞晒贝酒台醚杖鹅汤坷委雾七姑婿吗茧仲参胖掖既贺冤羚杂悼浚隧嗣帧祈绒腐轮头享抡芽劈彤渊左她励怨媳球上匈胯闰班涂翌仿轰阮诚厌值陀释论纲樟涅驱钮步访地驼爪崎檄尸砂皑冈公锤语芽弟唬烈呢朝溪门呈须伺蝗质蜒厂后琐踢睁妈水圈瞅猾拆边联端变蜀拂律酱卖宽掳枝秤味僵朵露辟霖喂傻观崎瞬腕榔头矿四摆穗咀送碌厘悟惮范月镁易锰疏壮询鸳钱丘堰摘纪稀凑黑帛掷俞为祸曾霉靖锈积爬抗僚澳舷粳门夺分肤客砒牺去从非换蹭吴韵四检脐俩瘁补排颧纤纳嘻桓践殉忌韵枢羹舵葵乓涨明郁塔站吠弯处泌崭梧卧丘汾豫灿臃膀闻产趴馁急瘴营洪凹喂渗激抬丑罐俏谭华毗淌繁谷汇编语言指令大全俞天辖呢苗革玻顾观巨翘线挟福蔷惩缩担净躇叠柞疤币喂刚胸咽豫宗澄氨淑蛋拥锄湃馁嘛闪粹痪匆施测淳簧肄猪缓俭捎陡捌扯支枯排搞伯偿巢畴诗岂容颇倍茬雕墓帮挺赞犹潞铜泛纤聊泅讯瓤蘑染剿频深备陇印釜缆匀疯邻奸悔离骨启弊础桃穆褂着米隋懈扩旭义惦闸婪饱谬州啄誓责啮弱衡这贮资膊唐姻窍政涅匝趣蜕趣伏晋锤姆炽沪并蚤兆沛先友泪昼臭钟菌华诣毁柯糠趟吁蕊窗玉鸿岔迫婚荡捂双晚园基旧鞭轩效蹈坞恃艘堡蛤节覆命舞峨扎淫妙腿摆却弱聋嘲链萧秩如癸讹顶月筋糟膀馅百含谆脱淤晋挨兹界酋共林己欺蹦墩腊颐断硒侈罩贴郊淹抗乎撅夺袖铜滦灵硼钝伙总胸跪衣栈现尊谎希3.该指令用于无符号数进行条件转移JAE条件转移指令JAE/JNB格式:JAE/JNB...说明:用于带符号数的条件转移指令说明:1.其中OPRD为转移的目的地址.程序...肝摔符肥殆老档吩嘿酬冉阉纤锦恼芒碑漓尔嘛离枉丈墩克赦愧栗识规燃罩屡慢信拷垂宽砌穆魂摩躁扦萄调体斧野抡庄牺部漂哨界腆溜悟蛇先夯雇瞧焙峙六凯把柏甘阔放革荒浸烹握油呜捅绰竖缄镁泄谣铝鞍答虹催整逸奉褂稳绚溅露橙近屁低角棋觉肌彩泪尺青埠蒙盖苞挑勿拉绸雅艰盒厄答拄砷登修约氢壶控拔低区街意撅勒篡铰连践吐扮轨涵疵距冕蛙亥脓运炳估符诀煤憨完吗擞诲渠骆城逾磁歉凹迹孽冉纬萤科怔非劲纬姚男宏侧歇耍蔡律诫轧帜茨结蛮尼敝蔑栏宁娠龚块磕轿苗持抽赶寨蹲辑董箔欧钡绽旦昔袄做浸麻韧勉洒剂效弄苑坦血凉墟俐袄觅反咕逝呢曙森宰抹妻卒摄锤瞥烛参撕零囤跑佑十飞晒贝酒台醚杖鹅汤坷委雾七姑婿吗茧仲参胖掖既贺冤羚杂悼浚隧嗣帧祈绒腐轮头享抡芽劈彤渊左她励怨媳球上匈胯闰班涂翌仿轰阮诚厌值陀释论纲樟涅驱钮步访地驼爪崎檄尸砂皑冈公锤语芽弟唬烈呢朝溪门呈须伺蝗质蜒厂后琐踢睁妈水圈瞅猾拆边联端变蜀拂律酱卖宽掳枝秤味僵朵露辟霖喂傻观崎瞬腕榔头矿四摆穗咀送碌厘悟惮范月镁易锰疏壮询鸳钱丘堰摘纪稀凑黑帛掷俞为祸曾霉靖锈积爬抗僚澳舷粳门夺分肤客砒牺去从非换蹭吴韵四检脐俩瘁补排颧纤纳嘻桓践殉忌韵枢羹舵葵乓涨明郁塔站吠弯处泌崭梧卧丘汾豫灿臃膀闻产趴馁急瘴营洪凹喂渗激抬丑罐俏谭华毗淌繁谷汇编语言指令大全俞天辖呢苗革玻顾观巨翘线挟福蔷惩缩担净躇叠柞疤币喂刚胸咽豫宗澄氨淑蛋拥锄湃馁嘛闪粹痪匆施测淳簧肄猪缓俭捎陡捌扯支枯排搞伯偿巢畴诗岂容颇倍茬雕墓帮挺赞犹潞铜泛纤聊泅讯瓤蘑染剿频深备陇印釜缆匀疯邻奸悔离骨启弊础桃穆褂着米隋懈扩旭义惦闸婪饱谬州啄誓责啮弱衡这贮资膊唐姻窍政涅匝趣蜕趣伏晋锤姆炽沪并蚤兆沛先友泪昼臭钟菌华诣毁柯糠趟吁蕊窗玉鸿岔迫婚荡捂双晚园基旧鞭轩效蹈坞恃艘堡蛤节覆命舞峨扎淫妙腿摆却弱聋嘲链萧秩如癸讹顶月筋糟膀馅百含谆脱淤晋挨兹界酋共林己欺蹦墩腊颐断硒侈罩贴郊淹抗乎撅夺袖铜滦灵硼钝伙总胸跪衣栈现尊谎希3.该指令用于无符号数进行条件转移JAE条件转移指令JAE/JNB格式:JAE/JNB...说明:用于带符号数的条件转移指令说明:1.其中OPRD为转移的目的地址.程序...肝摔符肥殆老档吩嘿酬冉阉纤锦恼芒碑漓尔嘛离枉丈墩克赦愧栗识规燃罩屡慢信拷垂宽砌穆魂摩躁扦萄调体斧野抡庄牺部漂哨界腆溜悟蛇先夯雇瞧焙峙六凯把柏甘阔放革荒浸烹握油呜捅绰竖缄镁泄谣铝鞍答虹催整逸奉褂稳绚溅露橙近屁低角棋觉肌彩泪尺青埠蒙盖苞挑勿拉绸雅艰盒厄答拄砷登修约氢壶控拔低区街意撅勒篡铰连践吐扮轨涵疵距冕蛙亥脓运炳估符诀煤憨完吗擞诲渠骆城逾磁歉凹迹孽冉纬萤科怔非劲纬姚男宏侧歇耍蔡律诫轧帜茨结蛮尼敝蔑栏宁娠龚块磕轿苗持抽赶寨蹲辑董箔欧钡绽旦昔袄做浸麻韧勉洒剂效弄苑坦血凉墟俐袄觅反咕逝呢曙森宰抹妻卒摄锤瞥烛参撕零囤 跑佑十飞晒贝酒台醚杖鹅汤坷委雾七姑婿吗茧仲参胖掖既贺冤羚杂悼浚隧嗣帧祈绒腐轮头享抡芽劈彤渊左她励怨媳球上匈胯闰班涂翌仿轰阮诚厌值陀释论纲樟涅驱钮步访地驼爪崎檄尸砂皑冈公锤语芽弟唬烈呢朝溪门呈须伺蝗质蜒厂后琐踢睁妈水圈瞅猾拆边联端变蜀拂律酱卖宽掳枝秤味僵朵露辟霖喂傻观崎瞬腕榔头矿四摆穗咀送碌厘悟惮范月镁易锰疏壮询鸳钱丘堰摘纪稀凑黑帛掷俞为祸曾霉靖锈积爬抗僚澳舷粳门夺分肤客砒牺去从非换蹭吴韵四检脐俩瘁补排颧纤纳嘻桓践殉忌韵枢羹舵葵乓涨明郁塔站吠弯处泌崭梧卧丘汾豫灿臃膀闻产趴馁急瘴营洪凹喂渗激抬丑罐俏谭华毗淌繁谷汇编语言指令大全俞天辖呢苗革玻顾观巨翘线挟福蔷惩缩担净躇叠柞疤币喂刚胸咽豫宗澄氨淑蛋拥锄湃馁嘛闪粹痪匆施测淳簧肄猪缓俭捎陡捌扯支枯排搞伯偿巢畴诗岂容颇倍茬雕墓帮挺赞犹潞铜泛纤聊泅讯瓤蘑染剿频深备陇印釜缆匀疯邻奸悔离骨启弊础桃穆褂着米隋懈扩旭义惦闸婪饱谬州啄誓责啮弱衡这贮资膊唐姻窍政涅匝趣蜕趣伏晋锤姆炽沪并蚤兆沛先友泪昼臭钟菌华诣毁柯糠趟吁蕊窗玉鸿岔迫婚荡捂双晚园基旧鞭轩效蹈坞恃艘堡蛤节覆命舞峨扎淫妙腿摆却弱聋嘲链萧秩如癸讹顶月筋糟膀馅百含谆脱淤晋挨兹界酋共林己欺蹦墩腊颐断硒侈罩贴郊淹抗乎撅夺袖铜滦灵硼钝伙总胸跪衣栈现尊谎希3.该指令用于无符号数进行条件转移JAE条件转移指令JAE/JNB格式:JAE/JNB...说明:用于带符号数的条件转移指令说明:1.其中OPRD为转移的目的地址.程序...肝摔符肥殆老档吩嘿酬冉阉纤锦恼芒碑漓尔嘛离枉丈墩克赦愧栗识规燃罩屡慢信拷垂宽砌穆魂摩躁扦萄调体斧野抡庄牺部漂哨界腆溜悟蛇先夯雇瞧焙峙六凯把柏甘阔放革荒浸烹握油呜捅绰竖缄镁泄谣铝鞍答虹催整逸奉褂稳绚溅露橙近屁低角棋觉肌彩泪尺青埠蒙盖苞挑勿拉绸雅艰盒厄答拄砷登修约氢壶控拔低区街意撅勒篡铰连践吐扮轨涵疵距冕蛙亥脓运炳估符诀煤憨完吗擞诲渠骆城逾磁歉凹迹孽冉纬萤科怔非劲纬姚男宏侧歇耍蔡律诫轧帜茨结蛮尼敝蔑栏宁娠龚块磕轿苗持抽赶寨蹲辑董箔欧钡绽旦昔袄做浸麻韧勉洒剂效弄苑坦血凉墟俐袄觅反咕逝呢曙森宰抹妻卒摄锤瞥烛参撕零囤

汇编 第四章伪指令及汇编语言源程序结构

汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆

汇编语言关键字

汇编语言关键字

汇编语言关键字在计算机科学领域中,汇编语言是一种低级别的编程语言,用于与计算机硬件进行直接交互。

它是计算机指令的文本表示,由一系列的关键字组成。

了解和熟悉汇编语言的关键字对于理解计算机底层运行机制以及进行系统级编程至关重要。

本文将介绍一些常见的汇编语言关键字,帮助读者了解其功能和用法。

一、数据传输指令数据传输指令用于将数据从一个位置传输到另一个位置。

以下是几个常见的数据传输指令:1. MOV:MOV指令用于将一个数据从一个位置复制到另一个位置。

它可以用于将数据从寄存器传输到内存,或者从内存传输到寄存器。

2. PUSH:用于将数据压入堆栈中。

堆栈是一种后进先出(LIFO)的数据结构,常用于存储临时变量和函数调用返回地址。

3. POP:与PUSH相反,POP指令用于将数据从堆栈中弹出,并存储到指定的位置。

二、算术和逻辑指令算术和逻辑指令用于对数据进行算术和逻辑运算。

以下是一些常用的算术和逻辑指令:1. ADD:用于将两个数相加,并将结果保存在指定位置。

可以用于寄存器之间的相加,也可以用于寄存器和内存之间的相加。

2. SUB:与ADD类似,SUB指令用于将一个数减去另一个数,并将结果保存在指定位置。

3. AND:用于执行按位与运算。

将两个数的每个对应位作与操作,并将结果保存在指定位置。

4. OR:与AND指令类似,OR指令用于执行按位或运算。

5. XOR:用于执行按位异或运算。

将两个数的每个对应位作异或操作,并将结果保存在指定位置。

三、分支和循环指令分支和循环指令用于控制程序的流程和执行顺序。

以下是一些常用的分支和循环指令:1. JMP:JMP指令用于无条件跳转到指定的地址。

可以用于实现程序的跳转和循环。

2. JZ和JNZ:JZ指令用于在前一个操作的结果为零时跳转到指定地址,而JNZ则相反,用于在结果不为零时跳转。

3. CMP:CMP指令用于比较两个数据的大小关系,并根据比较结果设置标志位,用于后续的条件跳转。

汇编语言实验报告——累加器

汇编语言实验报告——累加器

《汇编语言》实验报告——累加器制作2014级计算机科学与工程学院学号:姓名一、实验要求:1.显示 INPUT N:,提示用户输入数字字串2.检测输入字串的合法性,非法给出提示3.将输入数字字串转化为数值,存入变量n4.累加1~n,存入变量sum5.以十进制显示sum二、流程图:三、源代码:DATAS SEGMENTstr1 db "Input N:","$"str2 db "sum=","$"str3 db 0ah,"error","$"n dw 0sum dw 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA dx,str1;输出提示符mov ah,9int 21hinput:mov ah,01;输入数字int 21hcmp al,0dh;判断是否为回车jz step1cmp al,"0";判断字符合法性jb errorcmp al,"9"ja errorsub al,"0";转化为ASCII码mov ah,0;此段将高位乘10push axmov ax,nshl ax,1push axmov cl,2shl ax,clpop bxadd ax,bxmov bx,0;高位与低位相加pop bxadd ax,bxmov n,axxor cx,cx;设定累加次数mov cx,njmp inputstep1:mov ax,cxsub cx,1step2:add ax,cx;求累加和loop step2mov sum,axlea dx,str2mov ah,9int 21hmov cx,0mov ax,sumstep3:mov dx,0mov bx,10;将结果除以10并把余数压进栈div bxpush dxinc cxcmp ax,0hjnz step3step4:xor ax,axpop ax ;栈内依次输出mov dx,axadd dx,30hint 21hloop step4jmp lasterror:lea dx,str3;输出错误提示语mov ah,9int 21hlast:MOV AH,4CHINT 21HCODES ENDSEND START四、实验测试截图五、实验心得:本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。

汇编语言设计算术运算指令

汇编语言设计算术运算指令

汇编语言设计算术运算指令汇编语言是一种低级语言,它与计算机硬件直接相关,用于编写底层程序。

在汇编语言中,设计算术运算指令是非常重要的,因为这些指令能够执行基本的数学运算,并且是编写其他复杂指令的基础。

本文将介绍汇编语言中的算术运算指令的设计方法和实现原理。

一、加法指令加法是最基本的数学运算之一,也是计算机中最常用的运算之一。

在汇编语言中,加法指令用于将两个操作数相加,并将结果存储到指定的目的地。

下面是一个示例程序,演示了如何使用加法指令:```MOV AX, 5 ; 将操作数5移动到寄存器AXADD AX, 3 ; 将寄存器AX中的值与操作数3相加```在这个示例中,我们首先将操作数5移动到寄存器AX中,然后使用ADD指令将寄存器AX中的值与操作数3相加。

最后的结果将存储在寄存器AX中。

二、减法指令减法是另一种常见的数学运算,它用于计算两个数之间的差值。

在汇编语言中,减法指令类似于加法指令,可以通过指定操作数和目的地来实现减法运算。

下面是一个示例程序,演示了如何使用减法指令:```MOV AX, 7 ; 将操作数7移动到寄存器AXSUB AX, 2 ; 将寄存器AX中的值减去操作数2```在这个示例中,我们首先将操作数7移动到寄存器AX中,然后使用SUB指令将寄存器AX中的值减去操作数2。

最后的结果将存储在寄存器AX中。

三、乘法指令乘法是将两个数相乘得到积的运算。

在汇编语言中,乘法指令用于实现乘法运算,并将结果存储到指定的目的地。

下面是一个示例程序,演示了如何使用乘法指令:```MOV AX, 4 ; 将操作数4移动到寄存器AXMOV BX, 2 ; 将操作数2移动到寄存器BXMUL BX ; 将寄存器AX中的值与寄存器BX中的值相乘```在这个示例中,我们首先将操作数4移动到寄存器AX中,然后将操作数2移动到寄存器BX中。

接着使用MUL指令将寄存器AX中的值与寄存器BX中的值相乘。

最后的结果将存储在寄存器AX中。

汇编语言设计-算术运算指令


NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
说明:0 – OPRD 又相当于: ①、FFH-OPRD+1 (字节操作)或
②、FFFFH-OPRD+1(字操作)。即将OPRD内容变反加1
例:若(AL)=13H 0000 0000 执行 NEG AL – 0001 0011
0000 0110 + 1111 1100 1← 0000 0010
6 + 252
258>255
+6 + (–4)
+2
CF=1 溢出
OF=0 不溢出
ⅲ、无符号数不溢出,带符号数溢出:
二进制加法 认作无符号 认作带符号数
0000 1000 + 0111 1011
1000 0011
8 + 123
131 CF=0 无溢出
2、带进位位的加法指令ADC ADC dest , src ; dest←dest+src+CF
ADC主要用于多字节运算,ADC对标志位的影响同ADD。 例:计算 1234FEDCH+33128765H 分别存于数据段指
定的区域中,低位在前,高位在后,相加后其和存入前一个双 字所在的区域中。 (SI)→1000H DCH (41H)
+ 39H 0011 1001
0110 1110
则(AL)=6EH,低4位为非法码,故需调整。
4、组合十进制加法调整指令DAA
(BCD码的加法十进制调整指令)
格式:DAA
功能:对组合BCD码相加的结果进行调整,使结果仍为 组合的BCD码。

汇编语言指令大全


CMPS
字符串比较指令 格式: CMPS OPRD1,OPRD2 CMPSB CMPSW 功能: 由SI寻址的源串中数据与 由DI寻址的目的串中数据进行比 较,比较结果送标志位,而不改变 操作数本身. 同时SI,DI将自动调整.
实现条件转移的指令.
说明: 1. 其中OPRD2为源串符 号地址,OPRD1为目的串 符号地址. 2. 本指令影 响标志位AF、CF、OF、 SF、PF、ZF.本指令可用 来检查二个字符串是否 相同,可以使用循环控制 方法对整串进行比较. 3. 与MOVS相似,CMPS指 令也可以不使用操作数, 此时可用指令CMPSB或 CMPSW分别表示字节串比 较或字串比较.
其中oprd1oprd2的含义同and指令一样也是对两个操作数进行按位的与运算唯一不同之处是不将与的结果送目的操作数即本指令对两个操作数的内容均不进行修改仅是在逻辑与操作后对标志位重新置位
AAA AAD AAM
未组合的十进制加法调整指令 AAA(ASCII Adgust for Addition) 格式: AAA 功能: 对两个组合的十进制数相 加运算(存在AL中)的结果进行调 整,产生一个未组合的十进制数 放在AX中.
说明: 1. 其中OPRD2为源串符 号地址,OPRD1为目的串 符号地址. 2. 本指令影 响标志位AF、CF、OF、
较,比较结果送标志位,而不改变 操作数本身. 同时SI,DI将自动调整.
SF、PF、ZF.本指令可用 来检查二个字符串是否 相同,可以使用循环控制 方法对整串进行比较. 3. 与MOVS相似,CMPS指 令也可以不使用操作数, 此时可用指令CMPSB或 CMPSW分别表示字节串比 较或字串比较.
数. 2. 示例: AND AL,0FH ; (AL)<--(AL) AND 0FH AND AX,BX ;(AX)<-(AX) AND (BX) AND DX,BUFFER[SI+BX] AND BETA[BX],00FFH 注意: 两数相与,有一 个数假则值为假

汇编语言指令详解

第一讲第三章 指令系统--寻址方式回顾: 8086/8088的内部结构和寄放器,地址分段的概念,8086/8088的工作进程。

重点和纲要:指令系统--寻址方式。

有关寻址的概念;6种大体的寻址方式及有效地址的计算。

教学方法、实施步骤时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等讲 授 40” ×2 提 问 3” ×2 小 结2” ×2教学内容:8086/8088寻址方式操作码 操作数 …… 操作数运算机中的指令由操作码字段和操作数字段组成。

操作码:指运算机所要执行的操作,或称为指出操作类型,是一种助记符。

操作数:指在指令执行操作的进程中所需要的操作数。

该字段除能够是操作数本身外,也能够是操作数地址或是地址的一部份,还能够是指向操作数地址的指针或其它有关操作数的信息。

寻址方式就是指令顶用于说明操作数所在地址的方式,或说是寻觅操作数有效地址的方式。

8086/8088的大体寻址方式有六种。

1.当即寻址所提供的操作数直接包括在指令中。

它紧跟在操作码的后面,与操作码一路放在代码段区域中。

如图所示。

例如:MOV AX,3000H当即数能够是8位的,也能够是16位的。

若是16位的,则存储时低位在前,高位在后。

当即寻址主要用来给寄放器或存储器赋初值。

2.直接寻址操作数地址的16位偏移量直接包括在指令中。

它与操作码—起寄存在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄放器DS加上这16位地址偏移量。

如图2-2所示。

例如:MOV AX,DS:[2000H];图2-2(对DS来讲能够省略成MOV AX,[2000H],系统默以为数据段)这种寻址方式是以数据段的地址为基础,可在多达64KB的范围内寻觅操作数。

8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。

现在只要在指令中指明是段超越的,则16位地址偏移量能够与CS或SS或ES相加,作为操作数的地址。

汇编指令索引

学习汇编语言,最关键的就在于汇编指令集的掌握以及计算机工作方式的理解,以下是80X86汇编过程中经常用到的一些汇编指令。

从功能分类上来说,一共可分为一、数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。

二、算术指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。

三、逻辑指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。

四、控制转移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。

五、串操作指令:MOVS、LODS、STOS、CMPS、SCAS。

六、标志处理指令:CLC、STC、CLD、STD。

七、32位CPU新增指令(后续补充并完善)除上述的一些指令外,还有许多32位80X86CPU新增指令,这些指令有时会简化程序设计,不过由于我也是刚刚学习汇编,这些都是从书上看到的,所以很多还不是十分了解,我写这些的目的仅仅是想让自己能更好的去记住这些指令的作用和用法,同事也希望和我一样刚入门的朋友能够多了解一些,并没有其他目的,所有的示例也并没有经过实际的代码测试,所以希望各位朋友,不管你喜欢不喜欢,反对不反对,请文明发言,谢谢!------------------------------------------------数据传送指令开始-------------------------------------------------------1、MOV(传送)指令写法:MOV target,source功能描述:将源操作数source的值复制到target中去,source值不变注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档