安徽理工大学计算机汇编教程-数据运算程序设计

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

17
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算
and ah,01h
10.1.2 压缩型BCD码加减运算
;ah←截取ah中的CF位
or ah,30h
mov [di],ah mov ah,02h mov cx,04h next: mov dl,[di] int 21h dec di loop next mov ax,4c00h int 21h
2019/4/1
第10章
数据运算程序设计
4
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算
10.1.1 二进制加减运算
分解为 寄存器加 al al + [bx] [bx] + cy (进cf)al (进cf)al
2019/4/1
第10章
数据运算程序设计
5
计算机科学与技术系
《汇编语言程序设计》
name data asc1 asc2 Result data code exp10-4.asm segment db ‘2’, ‘3’, ‘8’ ;定义被加数 db ‘1’, ‘5’, ‘6’ ;定义加数 db 4 dup(?) ;定义结果和存放单元 ends segment assume cs:code,ds:data,es:data start: mov ax,data mov ds,ax mov es,ax cld ;清方向标志DF=0为增量串操作
2019/4/1
10.1.2 压缩型BCD码加减运算
;清进位标志 ;取被减数 ;对应位相减 ;十进制减法调整 ;保存求差的结果 ;修改地址偏移量 ;循环运算4个字节 ;返回DOS
第10章
数据运算程序设计
14
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算 10.1.2 非压缩型BCD码加减运算 非压缩型BCD码运算即是每一个字节表示一位BCD 码十进制数 。 如:1234十进制数表示非压缩型BCD码为:01H 02H03H04H 即 00000001 00000010 00000011 00000100 B
2019/4/1
第10章
数据运算程序设计
21
计算机科学与技术系
《汇编语言程序设计》
10.2
乘除运算
10.2.1 一般整数二进制乘除运算
例10.5 在内存单元mem1和mem2分别存放一单字节有符号整 数,编程求其乘积并存入result字单元中。
name data mem1 mem2 result data code dw 0 ends segment assume cs:code,ds:data
name exp10-3.asm
data
bcd1 bcd2
segment
db 42h, 83h, 57h, 96h db 90h, 14h, 35h, 68h
result
data
db 4 dup(?)
ends
2019/4/1
第10章
数据运算程序设计
13
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算
10.1 多精度的加减运算
10.1.1 二进制加减运算
汇编程序
name exp10-1.asm data segment addr1 db 6ch, 8ah, 3bh, 49h addr2 db 3eh, 5bh, 6fh, 7dh result db 0,0,0,0 len equ 4 data ends
第10章 数据运算程序设计
7
;si←取被加数addr1地址偏移量 ;bx←取加数addr2地址偏移量 ;di←取和result地址偏移量 ;cl←字节数 ;清进位标志 ;完成字节加法 ;保存求和结果 ;修改地址
skip:
;字节计数 ;返回DOS
code
2019/4/1
计算机科学与技术系
《汇编语言程序设计》
注意:在除法时除数不能为零,否则引起中断。
2019/4/1
第10章
数据运算程序设计
20
计算机科学与技术系
《汇编语言程序设计》
10.2 乘除运算 10.2.1 一般整数二进制乘除运算 二进制乘法运算
乘法指令 MUL mem|reg ;无符号二进制乘法 IMUL mem|reg ;有符号二进制乘法 乘积在AX或DX、AX中。 乘数可以通过各种寻址方式给出。
10.2.1 一般整数二进制乘除运算
mov di,offset result
mov al,[si] imul mem2 mov [di],ax mov ax,4c00h int 21h code ends end start
2019/4/1
;用mul就变为无符号
;返回DOS
第10章
数据运算程序设计
23
10.1.1 二进制加减运算
addr1 dw 8a6ch, 493bh addr2 dw 5b3eh, 7d6fh
;定义4字节被减数 ;定义4字节减数
result dw 2 dup(?)
len data dw 0002h ends
;定义存放差的单元
;定义循环计数值为2个字
2019/4/1
第10章
数据运算程序设计
加法可利用指令 add、adc与daa调整指令来配合 减法可利用指令 sub、sbb与das 调整指令来编程
2019/4/1
第10章
数据运算程序设计
12
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算
10.1.2 压缩型BCD码加减运算
例10.3 编写一四字节压缩型BCD码的减法运算。要求完成: result←96578342―68351490
2019/4/1
第10章
数据运算程序设计
19
计算机科学与技术系
《汇编语言程序设计》
10.2
乘除运算
利用8088/8086 CPU提供了乘法指令MUL和IMUL及除法指 令DIV和IDIV,可以直接用于一般整数(字节或字)二进制乘除 运算。 利用乘除调整指令AAM、AAD配合完成十进制数的乘除运算。
10.1.2 压缩型BCD码加减运算
;计数值为3字节 ;al←[si]且si←si+1 ;标志寄存器←将保存在ah中的标志位 ;非压缩BCD加法运算调整 ;状态标志保存在ah ;al←转换成ASCII码 ;[di] ←al且di←di+1 ;修改加数地址
skip:
2019/4/1
第10章
数据运算程序设计
;ah←转换成ASCII码
;ah送至结果的第四个字节 ;ah←2号调用 ;输出字符个数 ;从高字节到低字节输出显示
;返回DOS
code ends
end start
2019/4/1
第10章
数据运算程序设计
18
计算机科学与技术系
《汇编语言程序设计》
第10章 数据运算程序设计
10.1 多精度的加减运算 10.2 乘除运算
加法可利用指令 add、adc与aaa调整指令来配合 减法可利用指令 sub、sbb与aas 调整指令来编程
2019/4/1
第10章
数据运算程序设计
15
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算
10.1.2 压缩型BCD码加减运算
例10.4 编程计算非压缩型BCD码(ASCII码)的加法运算。 要求完成:result←832+651并将结果在屏幕上输出显示。
10.1 多精度的加减运算 减法运算 分解为 寄存器减 al al - [bx] [bx] cf (借cf)al (借cf)al
10.1.1 二进制加减运算
2019/4/1
第10章
数据运算程序设计
8
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算 name data exp10-2.asm segment
计算机科学与技术系
《汇编语言程序设计》
8086/8088和ARM核 汇编语言程序设计
第10章 数据运算程序设计
2019/4/1
第10章
数据运算程序设计
1
计算机科学与技术系
《汇编语言程序设计》
第10章 数据运算程序设计
10.1 多精度的加减运算
10.2 乘除运算
2019/4/1
第10章
数据运算程序设计
10.1.1 二进制加减运算
例10.1 编制完成两个无符号的四字节二进制数的加法运算。 如 8090H+8182H 8090H + 8182H 10212H 分解为字节加 + + 80H 81H 90H 82H
1H (进1)12H
(进1)02H
把以上的字节看成为字,四字节可分为两个字的加法。 由此可推出两个M个字节数的加等于作M次字节加或 M/2次字加
计算机科学与技术系
《汇编语言程序设计》
2019/4/1
exp10-5.asm segment db 36 db -27 ;定义被乘数 ;定义乘数 ;定义结果积存放单元
第10章
数据运算程序设计
22
计算机科学与技术系
《汇编语言程序设计》
10.2 乘除运算
start: mov ax,data mov ds,ax mov si,offset mem1
9
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算
code segment
10.1.1 二进制加减运算
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov si,offset addr1
mov bx,offset addr2 mov di,offset result
第10章 数据运算程序设计
16计》
10.1 多精度的加减运算
mov si,offset asc1 mov bx,offset asc2 mov di,offset result mov cx,03h mov ah,00h lods asc1 sahf adc al,[bx] aaa lahf or al,30h stosb inc bx loop skip
;返回DOS
end start
2019/4/1
第10章
数据运算程序设计
11
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算 10.1.2 压缩型BCD码加减运算 压缩型BCD码运算即是每一个字节表示两位BCD码 十进制数 。 如:1234十进制数表示压缩型BCD码为:12H 34H 即 00010010 00110100 B
;si←取被减数addr1地址偏移量
;bx←取减数addr2地址偏移量 ;di←取差result地址偏移量
mov cx,len
clc skip:mov ax,[si]
;cx←字数
;清进位标志
sbb ax,[bx]
mov [di],ax
2019/4/1
;完成字减法
;保存求差的结果
第10章 数据运算程序设计
code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,4 mov si,0 clc skip: mov al,bcd1[si] sbb al,bcd2[si] das mov result[si],al inc si loop skip mov ax,4c00h int 21h code ends end start
2019/4/1
第10章
数据运算程序设计
6
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算
code
start:
10.1.1 二进制加减运算
segment
assume cs:code,ds:data mov ax,data mov ds,ax mov si,offset addr1 mov bx,offset addr2 mov di,offset result mov cl,len clc mov al,[si] adc al,[bx] mov [di],al inc si inc bx inc di dec cl jnz skip mov ax,4c00h int 21h ends end start
2
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算 10.1.1 二进制加减运算
本节主要介绍多字节无符号二进制数的加减法运算程序设 计,特别要注意运算中加法进位和减法借位问题。
2019/4/1
第10章
数据运算程序设计
3
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算 加法运算
10
计算机科学与技术系
《汇编语言程序设计》
10.1 多精度的加减运算 add si,2
inc si
10.1.1 二进制加减运算
;修改被减数地址
inc
inc inc
si
bx bx ;修改减数地址
inc
inc
di
di
;修改结果差地址
loop skip
mov ax,4c00h
int 21h code ends
相关文档
最新文档