汇编实验1
- 格式:pdf
- 大小:231.94 KB
- 文档页数:21
实验 1-3 源代码:
data segment BUF DB 03EH,060H,93H MAX DB 00H
data ends
stack1 segment para stack dw 20h dup(0)
stack1 ends
code segment
欢迎下载
8
—
assume cs:code,ds:data,ss:stack1,es:data
MOV AH,02H INT 21H MOV DL,BL AND DL,0FH CMP DL,0AH JB L4 ADD DL,7H L4:ADD DL,30H
MOV AH,02H
INT 21H
MOV AH,4CH
欢迎下载
12
—
INT 21H CODE ENDS END START 运行结果:
实验 1-5 源程序: DA TA SEGMENT
START: MOV AX,DATA MOV DS,AX MOV AX,BUF1 MOV BX,AX AND AX,0FFFFH JNS L ;sf 表示符号标志位,若最高位大于 7 时,则为负,该命令判断是
否为负,为负则求反(加一) ,为正则原样输出 NEG AX XOR BX,0FFFFH OR AX,8000H ;保持符号位不变 OR BX,8000H
START:
MOV AX,DATA
MOV DS,AX
MOV AX,100H
MOV ES,AX
MOV CX,10
欢迎下载
13
—
MOV DI,0
MOV SI,9
LOP:MOV BX,CX
;MOV AL,BF+[BX]-1
MOV AL,ES:-1[BX]
AND AL,0FFH;mov 不影响标志位
JP L1 ;pf 为奇偶标志位,当位数为偶数时为 1
START:
MOV AX,DATA
MOV DS,AX
AND AX,0000H
MOV AL,BUF; 通过对所有的数取阶码比较大小
ADD AL,80H
MOV MAX,AL
MOV BL,BUF+1
ADD BL,80H
CMP MAX,BL
JAE L1
MOV MAX,BL
L1:MOV BL,BUF+2
ADD BL,80H
BUF DB 10 DUP(0) BF DB 00011110B,11111111B,6 DUP(0),00110000B,00000001B DA TA ENDS
STACK1 SEGMENT PARA STACK DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,SS:STACK1
5) 将 1000H 单元开始的 10 个字节数,采用奇偶校验,将奇数在前偶数在 后仍存回原数据区。本实验要求在 DEBUG 调试状态下进行 ,包括汇编程序、运 行程序、检查结果。
6) 从键盘上接收一位十进制数 X,计算 Y 值,并以十六进制形式显示出来, Y 按下列公式计算。
X 2 X (X
3)
X 2 2 X (X
MOV AH,02H
INT 21H
MOV DX,BX
AND DX,0F00H
MOV CL,8
SHR DX,CL
CMP DX,0AH
JB L2
ADD DX,7H
L2:ADD DX,30H
MOV AH,02H
INT 21H
MOV DX,BX
AND DX,0F0H
MOV CL,4
SHR DX,CL
CMP DX,0AH
JB L3
ADD DX,7H
L3:ADD DX,30H
MOV AH,02H
INT 21H
MOV DX,BX
AND DX,0FH
欢迎下载
7
—
CMP DX,0AH JB L4 ADD DX,7H L4:ADD DX,30H MOV AH,02H INT 21H mov ah,4ch int 21h code ends end start
实验一 顺序与分支程序设计
一 、实验目的
1) 掌握顺序程序设计方法。 2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。 3) 熟悉在 PC 机上建立、汇编、连接、调试和运行汇编语言程序的过程。
二、实验内容
1) 有一字变量 BUF1 是以原码表示的有符号数,要求将其转换为反码和补 码,分别存入 BUF2 和 BUF3 单元,并在屏幕上显示出来。
欢迎下载
2
—
DATA SEGMENT BUF1 DW 932AH ;(以十六进制表示一个数的原码,包括符号位 ) BUF2 DW ? BUF3 DW ?
DATA ENDS
STACK1 SEGMENT PARA STACK DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1,ES:DATA
CMP MAX,BL
JAE L2
MOV MAX,BL
L2:AND DX,0000H
MOV DL,MAX
欢迎下载
11
—
SUB DL,80H; 包含有 cmp 功能,对最大的数减去 80h(取回原码) JAE L3 MOV BL,DL MOV DL,'-'; 如果是负数显示符号 MOV AH,02H INT 21H MOV DL,BL NEG DL; 求补(针对带符号数) L3:MOV BL,DL; 显示最大的数 AND DL,0F0H MOV CL,4 SHR DL,CL ADD DL,30H
JB L2
ADD DL,07H
L2:ADD DL,30H
MOV AH,02H
INT 21H
POP CX
LOOP LP
MOV DL,' '
INT 21H
POP CX
欢迎下载
4
—
LOOP LOP MOV AH,4CH INT 21H CODE ENDS END START 运行结果:
屏幕上显示的是 BUF1 数的反码和补码(十六进制,包括符号位) 。
STACK1 ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK1,ES:DATA
欢迎下载
15
—
START:
MOV AX,DATA
MOV DS,AX
MOV AH,01H
INT 21H
SUB AL,30H
CMP AL,3
JB L9
CMP AL,6
JA L9
AND AH,00H
MOV DL,AL
LEA BX,TABLE
SUB DL,3
SHL DL,1
MOV DI,DX;
MOV DL,AL
MUL DL
JMP [BX+DI]
L3:ADD AL,DL
JMP L1
L4:SHL DL,1
SUB AL,DL
JMP L1
欢迎下载
16
—
L5:JMP L1
L6:SHR AL,1
START:
MOV AX,DATA
MOV DS,AX
AND AX,0000H
MOV AL,BUF
MOV MAX,AL
MOV BL,BUF+1
CMP MAX,BL; 找到最大的数
JAE L1
MOV MAX,BL
L1:MOV BL,BUF+2
CMP MAX,BL
JAE L2;显示最大的数
MOV MAX,BL
实验 1-4 源代码: data segment
BUF DB -34H,3AH,-43H; 转换成补码 MAX DB 00H data ends
stack1 segment para stack
欢迎下载
10
—
dw 20h dup(0) stack1 ends
code segment
assume cs:code,ds:data,ss:stack1,es:data
JMP L1
L1:MOV BX,AX
MOV DX,BX
MOV CL,4
SHR DL,CL
CMP DL,0AH
JB L7
ADD DL,7H
L7:ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BL
2)有两个两字节无符号数分别放在存储单元 A 、B 起始的缓冲器中,求其 和,结果放在 A 起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元 。
3) 在 BUF 和 BUF+1、BUF+2 单元分别放有一个无符号字节型数,编程序 将其中最大数存入 MAX 单元,并在屏幕上显示。
4) 要求同上,只是比较的数为有符号数。
LEA BX,BUF
ADD BX,DI
MOV [BX],AL
INC DI
JMP L2
L1:MOV [BUF+SI],AL
DEC SI
L2:LOOP LOP
MOV CX,10
LP:MOV BX,CX
MOV AL,BUF+[BX]-1
MOV ES:-1[BX],AL
LOOP LP
MOV AH,4CH
INT 21H
4)
Y
X 2(X
5)
X 2 / 2(X
6)
7) 从键盘上接收两个一位十六进制数 X 和 Y,然后再输入一个 A-D 之间的 一个字符,按下列要求计算。