汇编语言课件十进制调整指令讲解

合集下载

汇编语言代码转换 大小写,二进制,十进制,16进制的相互转换

汇编语言代码转换 大小写,二进制,十进制,16进制的相互转换

《微机原理与接口技术》课程设计(学年论文)说明书课题名称:代码转换程序设计(A3-2)学生学号:专业班级:学生姓名:学生成绩:指导教师:***课题工作时间: 2011-6-13 至 2011-6-18武汉工程大学教务处制填写说明:1. 一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;2. 四、五两项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3. 成绩评定由指导教师按评定标准评分。

4. 此表格填写好后与正文一同装订成册。

课程设计评审标准(指导教师用)代码转换程序设计说明书1、方案论证(1)大小写字母、二进制与十六进制、十六进制与十进制的转换方法在计算机系统中有多种数制和编码,常用的有二进制,八进制以及16进制。

这些数制和编码虽然在储存形式上各有差异,但彼此也相互联系。

大小写转换,主要利用小写字母比大小字母大20H的关系,将小写字母减20H就转换为大写字母,将大写字母加20H就转换为小写字母。

二进制,十进制以及16进制,主要利用0到9的数值等于相应ASCALL码减30H,而A到F的数值等于相应ASCALL码减37H,这样即可利用移位,除十取余取整等方法实现其相互转换。

(2)宏汇编程序设计要点宏是源程序中的一段有独立功能的程序代码。

宏指令,用户自定义的指令。

编程序时候,将多次使用的功能用一条宏指令来代替。

汇编包括指令,伪指令,宏指令。

前两个都是规定的,最后一个是自己设计的。

好处是用起来方便定义,但是要先定义,后调用,其优点是可以随时随地的调用宏汇编程序。

2、程序设计(1)总体设计对“实现从键盘输入16位二进制数,转换成4位十六进制数显示出来。

”的分析处理。

首先将键盘输入的二进制数以二进制形式储存起来:每次输入,将其ASCALL码值将减去30H,然后左移一位,在然后与下个输入的减30H的数相加,这样就将键盘输入的值以二进制形式储存在寄存器中.二进制转换为16进制数输出:用循环指令左移四位,取出最低4位,利用16进制所对应的ASCALL码值比其本身大30H或37H的关系,将低位转换成对应的ASCALL码值,再调用DOS系统显示字符功能,将转换后的字符显示出来,如此循环四次即可.程序总流程图:(2)程序设计二进制转十六进制流程图:程序代码及注释:;PUBLIC XPEXTRN INFO4:BYTE,INFO1:BYTE,INFO2:BYTECODE SEGMENTXP PROC FARASSUME CS:CODECALL DEC2BIN ;调用将键盘输入的ASCALL值转换为二进制数LEA DX,INFO2MOV AH,9INT 21H ;显示提示信息CALL BIN2HEX;调用将储存的二进制转换为16进制函数MOV DL,'H'MOV AH,2INT 21HRETCAL: MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HLEA DX,INFO4MOV AH,9INT 21H;输入非二进制数,显示错误DEC2BIN PROC NEARLEA DX,INFO1MOV AH,9INT 21H;显示提示信息XOR BX,BX ;BX清零NEWCHAR: MOV AH,1INT 21H ;键盘输入,存放在AL中CMP AL,0DHJE RE;如果输入回车键,键盘输入结束SUB AL,30HJL CALCMP AL,1JG CAL ;输入为非二进制数,显示错误并退出CBWXCHG AX,BXMOV CX,2MUL CXXCHG AX,BXADD BX,AXJMP NEWCHAR;将键盘输入的制转换为二进制数,存放在BX中,并且每输入一个值,先将BX左移一位再相加. RE: MOV DL,'B'MOV AH,2INT 21HRETDEC2BIN ENDPBIN2HEX PROC NEARMOV C H,4ROTATE: MOV CL,4ROL BX,CL ;BX每左移4位输出,四位二进制表示一位十六进制MOV A L,BLAND A L,0FHADD A L,30HCMP A L,3AHJL PRINTIT ;结果若为0到9的数,则加30H后直接输出ADD AL,07H ;结果若为A到F的数,则加30H后再加07H直接输出PRINTIT: MOV DL,ALMOV AH,2INT 21HDEC CHJNE ROTATERETBIN2HEX ENDPCRLF PROC NEARMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;回车换行RETCRLF ENDPXP ENDPCODE ENDSEND3、程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(5)程序运行结果结果说明:当输入小写字母(如a)时,就转换成相应的大写字母(如A),反之亦然;当如入二进制(如1011B),,就转换成相应的十六进数(000BH),反之亦然;如果输入的字母或数字不符合要求,就会显示“INPUT ERROR”4、结论。

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法

汇编语⾔各种指令的解释与⽤法【数据传输指令】⼀、通⽤数据传送指令1、传送指令 MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到⽬的地址。

指令⽀持的寻址⽅式:⽬的操作数和源操作数不能同时⽤存储器寻址⽅式,这个限制适⽤于所有指令。

指令的执⾏对标志位的影响:不影响标志位。

指令的特殊要求:⽬的操作数DST和源操作数SRC不允许同时为段寄存器;⽬的操作数DST不能是CS,也不能⽤⽴即数⽅式。

2、进栈指令 PUSH (push onto the stack)出栈指令 POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常⽤来暂存某些数据,⽽POP指令⼜可将这些数据恢复。

PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC) POP DST (DST)<-((SP));(SP)<-(SP)指令⽀持的寻址⽅式:push 和 pop指令不能不能使⽤⽴即数寻址⽅式。

指令对标志位的影响:PUSH 和 POP指令都不影响标志位。

指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2; POP指令的DST不允许是CS寄存器;3、交换指令 XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)<->(OPR2)指令⽀持的寻址⽅式:⼀个操作数必须在寄存器中,另⼀个操作数可以在寄存器或存储器中。

指令对标志位的影戏:不影响标志位。

指令的特殊要求:不允许使⽤段寄存器。

⼆、累加器专⽤传送指令4、输⼊指令 IN (input)输出指令 OUT (output)指令的汇编格式:IN ac,port port<=0FFHIN ac,DX port>0FFHOUT port,ac port<=0FFHOUT DX,ac port>0FFH指令的基本功能:对8086及其后继机型的微处理机,所有I/O端⼝与CPU之间的通信都由输⼊输出指令IN和OUT来完成。

汇编语言指令大全

汇编语言指令大全
加法指令 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为转移的目的地址.程序...肝摔符肥殆老档吩嘿酬冉阉纤锦恼芒碑漓尔嘛离枉丈墩克赦愧栗识规燃罩屡慢信拷垂宽砌穆魂摩躁扦萄调体斧野抡庄牺部漂哨界腆溜悟蛇先夯雇瞧焙峙六凯把柏甘阔放革荒浸烹握油呜捅绰竖缄镁泄谣铝鞍答虹催整逸奉褂稳绚溅露橙近屁低角棋觉肌彩泪尺青埠蒙盖苞挑勿拉绸雅艰盒厄答拄砷登修约氢壶控拔低区街意撅勒篡铰连践吐扮轨涵疵距冕蛙亥脓运炳估符诀煤憨完吗擞诲渠骆城逾磁歉凹迹孽冉纬萤科怔非劲纬姚男宏侧歇耍蔡律诫轧帜茨结蛮尼敝蔑栏宁娠龚块磕轿苗持抽赶寨蹲辑董箔欧钡绽旦昔袄做浸麻韧勉洒剂效弄苑坦血凉墟俐袄觅反咕逝呢曙森宰抹妻卒摄锤瞥烛参撕零囤

十进制调整指令

十进制调整指令
:12345678+33445566
两个数的加法要分4次进行。 • 最低2位数的加法(78+66)用ADD指令相加,DAA指令调整。 • 其余三次加法用ADC指令相加,DAA指令调整。 上面的4次运算可以用循环实现。运算前通过指令“ADD AL, 0”把CF 清零,4次加法统一使用ADC指令实现。
(4)AAD(ASCII Adjust before Division)非压缩十进制除法调整
格式:AAD 功能:将AH和AL中的两位BCD数调整为等值的16位二进制数 调整算法: AX=AH×10+ AL 例: 58÷7 MOV AX, 0508H ;非压缩BCD数58装入AX,高4位必须为0 AAD ;把非压缩BCD数58调整为二进制数,(AX)= 003AH MOV BL, 7 DIV BL ;按照二进制格式相除 ; (AL) = 08H(商), (AH) = 02H(余数) 说明:先进行非压缩BCD数调整,然后用二进制无符号数除法指 令相除,商在AL中,余数在AH中。
在80X86微处理器上,上述调整由“十进制调整指令”实现。
(1)DAA(Decimal Adjust after Addition)十进制加法调整
格式:DAA 功能:对AL中的加法结果进行BCD运算调整 例:89+57 MOV AL, 89H ;BCD数89装入AL,使用16进制数格式 ADD AL, 57H ;按照二进制格式相加,(AL)= 0E0H,AF=1
AAA调整算法: if (AL低4位>9 或 AF=1)then AL=AL+06H ; AH=AH+1; AF=1 ; CF=1; else AF=0 ; CF=0 ; endif AL=AL AND 0FH ;AL高4位清零

汇编语言基本指令详解

汇编语言基本指令详解

汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。

它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。

汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。

下面将详细介绍汇编语言中常用的基本指令。

1. 数据传送指令数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。

MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。

例如,MOV AX, BX可以将BX的值传送给AX。

ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。

格式为ADD 目标操作数, 源操作数。

例如,ADD AX, BX可以将AX与BX的值相加,并将结果保存在AX中。

SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存到目标操作数中。

格式为SUB 目标操作数, 源操作数。

例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。

MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。

格式为MUL 目标操作数, 源操作数。

例如,MUL AX, BX可以将AX与BX的值相乘,并将结果保存在AX中。

2. 算术逻辑指令算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。

ADD指令在前面已经提到,用于将两个操作数相加。

SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。

MUL指令在前面已经提到,用于将两个操作数相乘。

DIV指令用于将目标操作数除以源操作数,并将商保存到目标操作数,余数保存在DX中。

格式为DIV 操作数。

例如,DIV BX可以将AX的值除以BX,并将商保存在AX中,余数保存在DX中。

AND指令用于对两个操作数进行按位与运算,并将结果保存到目标操作数中。

格式为AND 目标操作数, 源操作数。

例如,AND AX,BX可以将AX与BX的值按位与,并将结果保存在AX中。

汇编指令1

汇编指令1

汇编语言指令集一、数据传输指令1. 通用数据传送指令.MOV(MOVe) 传送字或字节.MOVS(MOVe String) 串传送指令MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.POP把字弹出堆栈.PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD先交换再累加.( 结果在第一个操作数里)XLAT(TRANSLATE) 字节查表转换.── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA (Load Effective Address)装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS (Load DS with pointer)传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES (Load ES with pointer)传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF (Load AH with Flags)标志寄存器传送,把标志装入AH.SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器.PUSHF (PUSH the Flags)标志入栈.POPF (POP the Flags)标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAA 加法的十进制调整.压缩的BCD码加法十进制调整指令SUB (SUBtract)减法.SBB (SuVtrach with borrow)带借位减法.DEC (DECrement)减1.NEC (NEGate)求反(以0 减之).CMP (CoMPare)比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAS 减法的十进制调整.压缩的BCD码减法十进制调整指令MUL (unsinged MULtiple)无符号乘法.IMUL (sIgned MUL tiple)整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV (unsigned DIVide)无符号除法.IDIV (sIgned DIVide)整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW (Count Byte to Word)字节转换为字. (把AL中字节的符号扩展到AH中去)CWD (Count Word to Doble word)字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL (SHift logical Letf)逻辑左移.SAL 算术左移.(=SHL)SHR (SHift logical Right)逻辑右移.SAR 算术右移.(=SHR)ROL (Rotate Left )循环左移.ROR (Rotate Right)循环右移.RCL (Rotate Left through Carry)通过进位的循环左移.RCR (Rotate Right through Carry)通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL四、串指令───────────────────────────────────────DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS (CoMPare String)串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS (SCAn String)串扫描指令.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS (STOre into String)保存串.是LODS的逆过程.REP (REPeat)当CX/ECX<>0时重复.REPE/REPZ (REPeat while Equal/Zero)当ZF=1或比较结果相等,且CX/ECX<>0时重复. REPNE/REPNZ (REPeat while Not Equal/Zero)当ZF=0或比较结果不相等,CX/ECX<>0时重复. REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令───────────────────────────────────────1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD (SeT Direction flag)置方向标志位.CLD (CLear Direction flag)清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令───────────────────────────────────────DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.8088 汇编跳转cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主程序nop 无作用,英文“no operation”的简写,意思是“do nothing” call 调用子程序je 或jz 若相等则跳jne或jnz 若不相等则跳jmp 无条件跳jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳pop 出栈push 压栈MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定。

汇编语言指令PPT课件

汇编语言指令PPT课件

ARP ST0中的辅助寄存器指针; 这3位指出了当前使用
的辅助寄存器 (ARx);
ASM ST1 (–16 ASM 15)中的5位移位字段;
B
累加器B;
BRAF ST1中的块重复激活标志;
BRC 块重复计数器;
BITC 指定数据存储器中的测试位,4位数字表示
(0BITC 15) ;
C16 ST1中的算术精度模式位双16位/双精度;
;src=(src-Smem<<15)<<1+1 ;else src=src<<1 SUBS Smem,src ; src=src-uns(Smem) 乘法指令10条 MPY Smem,dst ; dst=TSmem MPYR Smem,dst ;dst=rnd(TSmem) MPY Xmem,Ymem,dst; dst=Xmem Ymem,T=Xmem
n
XC 指令的字数, n = 1 or 2;
N 指定 RSBX, SSBX, XC 修正的寄存器:
N = 0 修正 ST0
N = 1 修正 ST1
13.03.2021
.
5
第四章 DSP汇编语言基础
OVA OVB OVdst OVdst_ OVsrc OVM PA PAR PC pmad Pmem PMST
;if C16=1, ; dst(39-16)=dst(39-16)+src(31-16) ; dst(15-0)=dst(15-0)+src(15-0) DADST Lmem,src ; if C16=0, dst=Lmem+(T<<16+T) ;if C16=1, ; dst(39-16)=dst(39-16)+T ; dst(15-0)=dst(15-0)+T

汇编语言指令大全及实例解析

汇编语言指令大全及实例解析

汇编语言指令大全及实例解析
汇编语言是一种底层的计算机语言,它直接操作计算机的硬件资源。

在汇编语言中,指令是最基本的操作单位,通过指令可以实现对计算机硬件的控制和操作。

本文将为大家介绍一些常用的汇编语言指令,并通过实例解析它们的具体用法和功能。

1. MOV指令。

MOV指令用于将数据从一个位置复制到另一个位置。

例如,下面的汇编代码将把寄存器AX中的值移动到寄存器BX中:
MOV BX, AX.
这条指令将AX中的值复制到BX中。

2. ADD指令。

ADD指令用于将两个操作数相加,并将结果存储到目标操作数中。

例如,下面的汇编代码将把寄存器AX和BX中的值相加,并将结果存储到AX中:
ADD AX, BX.
3. SUB指令。

SUB指令用于将目标操作数减去源操作数,并将结果存储到目标操作数中。

例如,下面的汇编代码将把寄存器AX中的值减去BX 中的值,并将结果存储到AX中:
SUB AX, BX.
4. CMP指令。

CMP指令用于比较两个操作数的大小,并根据比较结果设置标志位。

例如,下面的汇编代码将比较AX和BX中的值:
CMP AX, BX.
以上是一些常用的汇编语言指令及其实例解析。

通过学习和理解这些指令,我们可以更好地理解和掌握汇编语言的编程技巧,从而更好地编写高效的汇编语言程序。

希望本文对大家有所帮助。

汇编语言指令表(按字母顺序)

汇编语言指令表(按字母顺序)
DEC
减一指令DEC(Decrement by 1)
格式: DEC OPRD
功能: OPRD<--OPRD-1
说明:
1. OPRD为寄存器或存储器操作数.
2.这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF标志位.
3.示例DEC AX
DEC CL
DEC WORD PTR[DI]
DEC ALFA[DI+BX]
则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,
否则(AL)<--(AL) and 0FH
ADC
带进位加法指令ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
CWD
字扩展指令CWD(Convert Word to Double Word)
格式: CWD
功能:将字扩展为双字长,即把AX寄存器的符号位扩展到DX中.
说明:
1.两个字或字节相除时,先用本指令形成一个双字长的的被除数.
2.本指令不影响标志位.
3.示例:在B1、B2、B3字节类型变量中,分别存有8们带符号数a、b、c,实现(a*b+c)/a运算。
STC ;置CF=1
CMC ;置CF=(Not CF)进位标志求反
CLD ;置DF=0
STD ;置DF=1
CLI ;置IF=0,CPU禁止响应外部中断
STI ;置IF=1,使CPU允许向应外部中断
功能:完成对标志位的置位、复位等操作.
说明:例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改吕指针.

汇编语言课程设计-十进制加减法

汇编语言课程设计-十进制加减法

目录课程设计任务书 (2)1 问题描述 (3)2 前期分析 (3)3 课程设计 (3)3.1 总体设计 (3)3.2 模块设计 (4)3.2.1 求和模块 (4)3.2.2 输入十进制数模块 (5)3.2.3 存储器清零模块 (6)3.2.4 减法模块 (7)4 程序源代码 (7)5 调试与分析 (13)6 测试结果 (13)7 经验与体会 (15)评分表 (16)课程设计任务书学生姓名:毛习均专业班级:计算机1004班指导教师:许毅工作单位:计算机科学与技术学院题目: 十进制加减计算器初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。

实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。

具体的设计任务及要求:1)编写程序实现十进制数的加减法;2)将计算结果在屏幕上显示;3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。

在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。

阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试,和验收。

周5:撰写课程设计报告。

指导教师签名:年月日系主任(或责任教师)签名:年月十进制加减法计算器1问题描述用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改。

在此程序中采用子结构程序使结构清晰。

汇编语言指令_3

汇编语言指令_3

汇编语⾔指令_38088指令系统总结预备知识:符号含意、数据传送原则符号含意符号含意opr操作数src源操作数dst⽬的操作数mem存储器im⽴即数seg段寄存器reg通⽤寄存器EA偏移地址PA物理地址nn直接地址DISP8:8位偏移地址DISP16:16位偏移地址数据传送原则⼝诀数据传送原则寄段储间互传数,seg、reg、mem之间的数据可以相互传送。

⽴即只⼊寄和储。

im可⼊reg、mem只有寄间互换数,reg之间的数据可以传送。

Mem间、seg间不可⾃传CS⽴即不可⽬,CS和⽴即数不可⼊,不能当⽬的操作数8088指令系统8088指令系统分六⼤类⼀、数据传送指令⼆、算术运算指令三、逻辑运算与位移指令四、串操作指令五、控制与转移指令六、CPU控制指令⼀、数据传送指令1.通⽤传送指令(1)传送指令MOV dst,src功能:dst←src(2)堆栈操作指令⼈WPUSH src作⽤:SP←SP-2((SP+1)+SP)←src src(reg seg mem) POP dst作⽤:dst←((SP+1)+SP)SP←SP-2dst(reg seg mem)(3)交换指令XCHG OPR1,OPR2OPR1←→OPR22.累加器传送指令(1)输⼊输出指令256B短格式:直接寻址,64K长格式:直接、间接寻址,PORT为8位⼝地址输⼊指令:直接寻址IN AX,PORT INAL,PORT间接寻址IN AX,DX IN AL,DX输出指令:直接寻址OUT AX,PORT OUT AL,PORT间接寻址OUT AX,DX OUT AL,DX(2)换码指令XLAT AL←(BX+AL)(BX)为mem地址3.地址传送指令(1)有效地址传送寄存器LEA reg16,mem作⽤:mem的EA→reg16(2)指针送寄存器和DS指令LDS reg16,mem32作⽤:reg16←mem32的低字⾼字→DS(3)指针送寄存器和有ES指令LES reg16,mem32作⽤:reg16←mem32的低字⾼字→ES4.标志寄存器传送指令(1)取标志指令:LAHF F的低字节→AH(2)置标志指令:SAHF AH→flag的低字节(3)标志⼊栈指令:PUSHF SP-2→SP F→(SP+1):SP(4)标志出栈指令:POPF(SP+1):SP→F SP+2→SP⼆、算术运算指令1.加法类指令(Add)opr-reg mem B/W(1)不带进位加法ADD dst,src dst←dst+src影响OSZAPC(2)带进位加法ADC dst,src dst←dst+src+CF影响OSZAPC(3)加1指令INC opr opr←opr+1影响OSZP(4)组合⼗进制调整DAA放在ADD后(5)⾮组合⼗进制调整AAA放在ADC后原理:2个⼗进制数相加,可能出现⾮法数(A到F),需⽤调整指令,进⾏加6调整变成合法⼗进制数。

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

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

N
传完否?
JNZ AGAIN ;CX≠0,循环
Y
结束

8086算术运算指令可用的BCD码有两种:
ⅰ、组合BCD码:一个字节表示2位BCD码
ⅱ、非组合BCD码:一个字节只用低4位表示1位BCD 码, 高4位为0(无意义)。
例:设(AL)=35,(BL)=39 35H 0011 0101
执行 ADD AL,BL
JNS NEXT
;若SF=0,则(AX)>(BX),转NEXT
XCHG AX,BX ;否则交换
NEXT:HLT
Ⅱ、两负数比较,即A<0,B<0:两负数相减,结果也不会溢出,
仍可用符号标志,若SF=0,则A>B;反之若SF=1,则A<B。
Ⅲ、两异号数比较。当A>0,B<0时,当然的结果应该是A>B,
而且有SF=0。
格式:ADD dest,src ;dest←dest+src
功能:将源操作数与目的操作数相加,将结果送回目的操 作数。指令执行后对各状态标志均产生影响。
例:ADD CX,0F0F0H 设指令执行前(CX)=5463H
0101 0100 0110 0011
思考:
+ 1111 0000 1111 0000
LEA SI,BUF1 ;SI指向BUF1 LEA DI,BUF2 ;DI指向BUF2
取数 传送
MOV CX,100 ;CX放计数初值
AGAIN:MOV AL,[SI] ;取一字节数 MOV [DI],AL ;传送一字节数
修改地址指针 修改计数器
INC SI INC DI DEC CX
;修改地址指针 ;修改计数初值
NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。

十进制算术运算指令

十进制算术运算指令
作数。 OR指令用于把某位置1(与1相或)、某位
保持不变(与0相或) 。 XOR指令用于把某位变反(与1相异或)、
某位保持不变(与0相异或)。
10
XOR指令的用法:
0⊕0 = 0
1⊕1 = 0
1⊕0 = 1
0⊕1 = 1
1.逻辑值相同,运算结果为0; 将某个寄存器清零操作;
2.与1异或,结果相反; 将输入字符进行大小写转换;
所选位值送CF, 其它标志不定
同上
同上
同上
表3-4 位测试指令 14
三、位扫描指令
从386开始增加了位扫描指令,它们包括 BSF、BSR指令,可用于扫描操作数中第一个含 1的位。
15
1.顺向扫描指令 BSF 格式:BSF DST,RSC 功能:从右向左扫描RSC操作数中第一个含1的
位,并把扫描到的第一个含1的位号送DST操作数。 若RSC=0,则DST值不确定。 2.逆向扫描指令 BSR
一、ASCII码或非压缩BCD码调整指令
1.加法的ASCII码或非压缩BCD码调整指令AAA 格式:AAA 功能:跟在二进制加法指令之后,调整AL中的
结果成为非压缩BCD码并送回AL。 说明: 参与二进制加法指令的两个操作数必须是
ASCII码或非压缩BCD码。AAA指令必须在ADD或ADC 指令之后;二进制加法的和必须在AL寄存器中;调 整的非压缩BCD码结果在AL中。
26
1.无条件转移指令 JMP 格式:JMP DST 功能:无条件转移到DST所指向的地址
说明:DST为转移的目标地址(或称转向 地址),使用与转移地址有关的寻址方式可以形 成目标地址。
27
无条件转移指令 JMP
段内转移(IP) 段内直接短转移 段内直接转移 段内间接转移

汇编语言课件十进制调整指令讲解

汇编语言课件十进制调整指令讲解

汇编语言课件十进制调整指令讲解在汇编语言中,十进制调整指令是一种常用的操作指令,用于对二进制数的十进制表示进行调整。

它可以完成对数字的对齐、进位进位等操作,使得数字处理更加精确和方便。

本文将对汇编语言课件中的十进制调整指令进行详细的讲解。

一、导言在计算机系统的内部,所有的数据都是以二进制形式进行处理和存储的。

而在实际的应用中,经常需要对数据进行十进制调整,以满足具体的需求。

这时,汇编语言提供了一系列的协助指令,用于对二进制数的十进制表示进行调整。

这些指令主要包括BCD码的操作指令和十进制调整指令。

本文将重点讲解十进制调整指令的使用方法和注意事项。

二、BCD码的表示BCD码是一种用于表示数字的编码方式,它可以将每个数字表示为4个二进制位。

BCD码具有以下特点:1. 每个BCD码可以直接表示一个十进制数位;2. 在BCD码中,每个十进制数位的范围是0~9;3. BCD码和二进制码之间可以进行互相转换。

三、十进制调整指令的分类根据操作的类型,十进制调整指令可以分为以下几类:1. 加法调整指令加法调整指令用于对十进制数进行加法操作,并对运算结果进行调整。

常见的加法调整指令有DAA(Decimal Adjust Accumulator)和DAS(Decimal Adjust after Subtraction)指令。

2. 减法调整指令减法调整指令用于对十进制数进行减法操作,并对运算结果进行调整。

常见的减法调整指令有DAS(Decimal Adjust after Subtraction)指令。

3. 其他调整指令除了加法和减法调整指令外,还有一些其他类型的十进制调整指令。

例如,DAA和DAS指令既可以用于加法调整,也可以用于减法调整。

此外,还有一些特殊的调整指令,用于处理特定的十进制数操作。

四、应用举例1. 加法调整指令的应用假设我们有两个BCD码表示的十进制数x和y,现在我们要将它们相加,并将结果存储到一个新的变量z中。

汇编数值转换

汇编数值转换

汇编语言是一种低级编程语言,通常用于编写与计算机硬件紧密相关的程序。

在汇编语言中,数值转换可以通过使用特定的指令或宏来实现。

以下是一些常见的数值转换方法:1. 十进制转二进制:使用移位指令(例如SHL 或SHR)将十进制数转换为二进制数。

例如,将十进制数23 转换为二进制数可以执行以下指令:```assemblyMOV AX, 23 ; 将十进制数23 加载到AX 寄存器中SHL AX, 4 ; 将AX 寄存器中的值左移4 位,相当于将十进制数转换为二进制数```2. 二进制转十进制:使用加法指令将二进制数转换为十进制数。

例如,将二进制数1010010 转换为十进制数可以执行以下指令:```assemblyMOV AX, 01010010b ; 将二进制数1010010 加载到AX 寄存器中ADD AX, AX ; 将AX 寄存器中的值加到自身,相当于将二进制数转换为十进制数```3. 十六进制转十进制:使用移位和加法指令将十六进制数转换为十进制数。

例如,将十六进制数A3 转换为十进制数可以执行以下指令:```assemblyMOV AX, A3h ; 将十六进制数A3h 加载到AX 寄存器中SHL AX, 4 ; 将AX 寄存器中的值左移4 位,相当于将十六进制数转换为十进制数```4. 十进制转十六进制:使用移位和取模指令将十进制数转换为十六进制数。

例如,将十进制数255 转换为十六进制数可以执行以下指令:```assemblyMOV AX, 255 ; 将十进制数255 加载到AX 寄存器中SHR AX, 4 ; 将AX 寄存器中的值右移4 位,相当于将十进制数转换为十六进制数```这些是常见的数值转换方法,具体实现方式可能会因汇编语言的语法和编译器而有所不同。

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法

【】一、通用数据传送指令1、传送指令MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址。

指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。

指令的执行对标志位的影响:不影响标志位。

指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。

2、进栈指令PUSH (push onto the stack)出栈指令 POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC)POP DST (DST)<-((SP));(SP)<-(SP)指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。

指令对标志位的影响:PUSH 和 POP指令都不影响标志位。

指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2; POP指令的DST不允许是CS寄存器;3、交换指令XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)<->(OPR2)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。

指令对标志位的影戏:不影响标志位。

指令的特殊要求:不允许使用段寄存器。

二、累加器专用传送指令4、输入指令IN (input)输出指令 OUT (output)指令的汇编格式:IN ac,port port<=0FFHIN ac,DX port>0FFHOUT port,ac port<=0FFHOUT DX,ac port>0FFH指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法【数据传输指令】一、通用数据传送指令1、传送指令MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址。

指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。

指令的执行对标志位的影响:不影响标志位。

指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。

2、进栈指令PUSH (push onto the stack)出栈指令 POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC)POP DST (DST)<-((SP));(SP)<-(SP)指令支持的寻址方式:push 和pop指令不能不能使用立即数寻址方式。

指令对标志位的影响:PUSH 和 POP指令都不影响标志位。

指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者-2;POP指令的DST不允许是CS寄存器;3、交换指令XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)<->(OPR2)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。

指令对标志位的影戏:不影响标志位。

指令的特殊要求:不允许使用段寄存器。

二、累加器专用传送指令4、输入指令IN (input)输出指令 OUT (output)指令的汇编格式:IN ac,port port<=0FFHIN ac,DX port>0FFHOUT port,ac port<=0FFHOUT DX,ac port>0FFH指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。

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

非压缩的8421码调整指令: AAA(ASCII Adjust for Addition)加法的ASCII AAS(ASCII Adjust for Subtraction)减法的ASCII AAM(ASCII Adjust for Multiplication)乘法的ASCII调整指令 AAD(ASCII Adjust for Division)除法的ASCII
1001 1011 CF=1,AF=1
1001 0101
1001 0101
- 0110 0000 CF=1调 整
35)
0011 0101 (十进制
CF=1,AF=1
0001 0010
1110 0001
-0011 0000
调整
-0110 0000
-
1
1000 0001(十进制81)
1110 0001
MOV AL,AH
ADC AL,BH ;高字节相加
DAA
;高字节调整
MOV AH,AL
MOV AL,CL
(2) DAS DAS是减法的十进制调整指令,它必须跟在SUB或
SBB指令之后,将AL寄存器中的减法运算结果调整为2 位压缩型十进制数,仍保留在AL中。
调整方法如下:
若AF=1或者(AL)的低4位是十六进制的A~F,则使AL寄 存器的内容减去06H,并将AF位置1。
非压缩的8421码用8位表示一个十进制数位, 8位中的低4位 表示8421码,而高4位则没有意义。
显然,数字的ASCII码是一种非压缩8421码。 因为数字的 ASCII码的高4位值为0011B,而低4位是以8421码表示的十进制 数位, 这符合非压缩8421码高4位无意义的规定。
相应地PC机的十进制调整指令分为两组,下面分别加以说 明:
CF=1,AF=0
CF=1,AF=0
所得结果为 1234-3099=8135,CF=1。
8135为-1865的十进制补码,CF=1表示有借位。
程序如下: MOV DX, 3099H MOV BX, 1234H MOV AL,BL SUB AL,DL DAS MOV CL,AL MOV AL,BH SBB AL,DH DAS MOV CH,AL
执行指令前,(AL)=55,(BL)=36 执行ADD指令后
0101 0101 + 0011 0110
1000 1011 AF=0,但低4位出现非法码1011,加06 +0000 0110 执行DAA指令时
1001 0001 高4位CF=0,且高4位无非法码,不调整 最后得(AL)=91,CF=0,AF=0结果正确
调整的方法如下:
若AF=1或者(AL)的低4位是在A~F之间,则(AL)加06H,且 自动置AF=1;
若CF=1或者(AL)的高4位是在A~F之间,则(AL)加60H,且 自动置CF=1
说明:
本条指令对PSW中的OF标志位无影响,但影响所有其他 条件标志。
例: ADD AL,BL
DAA
如执行指令前,(=28,(BL)=68
整指令。进行十进制运算时,首先将十进制数据编码成为 BCD码。
压缩的BCD码调整指令
(1) DAA
DAA是加法的十进制调整指令,它必须跟在ADD或ADC指 令之后使用。
功能:将存于AL寄存器中的2位BCD码加法运算的结果调整 为2位压缩型十进制数,仍保留在AL中。
AL寄存器中的运算结果在出现非法码(1010B~1111B)或本 位向高位(指BCD码)有进位(由AF=1或CF=1表示低位向高位 或高位向更高位有进位)时,由DAA自动进行加6调整。
由于DAA指令只能对AL中的结果进行调整,因此,
对于多字节的十进制加法,只能从低字节开始,逐个字节 地进行运算和调整。
例如:设当前AX=6698,BX=2877,如要将这两个 十进制数相加,结果保留在AX中,则需要用下列几条指 令完成。
ADD AL,BL ;低字节相加
DAA
;低字节调整
MOV CL,AL
这一组指令适用于数字ASCII的调整, 也适用于一般的非 压缩8421码的十进制调整。
十进制调整指令不能单独使用,必须与加、减、乘、除二 进制指令配合使用才能进行十进制调整。十进制调整指令形式 上均为零地址指令, 其操作对象由AX寄存器隐含。
十进制调整指令 8086专门为完成十进制数运算而提供了一组十进制调
非压缩的BCD码调整指令
(3) AAA AAA是加法的ASCII码调整指令,也是只能跟在ADD指令之
后使用。其功能是将存于AL寄存器中的1位ASCII码数加法运 算的结果调整为1位非压缩型十进制数, 仍保留在AL中;如果 向高位有进位(AF=1),则进到AH中。因为数字0~9的ASCII 码是一种准非压缩BCD码(即低4位为BCD值,高4位有数值, 处理掉高4位的数值即为非压缩BCD码)
4.2.3 这组指令是在二进制数计算的基础上, 给予十进制数调整,
得到十进制数的结果。计算机中常用8421码表示十进制数。十 进制数码所对应的8421码如表4 - 1所示。
表 4-1 8421码
在PC机里,表示十进制数的8421码可以用压缩的8421码和 非压缩的8421码两种格式来表示。压缩的8421码用4位二进制数 表示一个十进制数位。
若CF=1或者(AL)的高4位是十六进制的A~F,则使AL的 内容减去60H,并将CF位置1。
DAS指令对OF标志无定义,但影响所有其它条件标志。
例如:编写程序段,完成1234-3099的操作。
分析: 0011 0100
- 1001 1001 整
调整
1001 1011 - 0000 0110 AF=1调
压缩的8421码调整指令:
DAA(Decimal Adjust for Addition) 加法的十进制调整指令
DAS(Decimal Adjust for Subtraction)减法的十进制调整指令
ADD、 ADC以及SUB、 SSB指令只用于二进制数加、减法, 是逢二进一,借一当二, 对连续的4位二进制数是逢十六进一, 借一当十六。但压缩的8421码却是逢十进一,借一当十。因此 使用加、减法指令对8421码运算后,必须经调整才能得到正确 的结果。
0010 1000 + 0110 1000
1001 0000
AF=1 执行ADD指令后,(AL)=90,CF=0,AF=1
执行DAA指令时,因AF=1而做 (AL) (AL)+06
1001 0000 + 0000 0110
1001 0110 得(AL)=96,CF=0,AF=1结果正确。
例: ADD AL,BL DAA
相关文档
最新文档