第2章 汇编语言程序设计实验
2.1、实验1-1——多字节数的运算
1、实验目的 计科1406
熟悉汇编语言的上机环境和各种工具(编辑、汇编、连接、调试); 201416010608 掌握完整段和简化段两种汇编程序的编写; 李文俊 掌握简单汇编程序的处理和调试过程。 2、实验内容
⑴、两个长度为3个字节(3B)的二进制无符号数,分别存放在首地址为buf1和buf2的连续内存单元中,编程求这两者之和,并将结果放在起始地址为res的内存单元中。例如,这两个数据为888888H、456789H,则其和应为[1]CDF011H。
要求: ? 用完整段和简化段两种方式实现。 ? 观察它们的反汇编结果并进行比较,单步运行程序。 注意: ? 程序运行前先将res清0,程序运行后观察res单元中的数据是否符合预期。 ? 数据存放应“高对高、低对低”。 ⑵、将两数改为3B的压缩BCD码,重复以上实验过程。例如,这两个数据为888888H、456789H,则其和应为[1]345677H(表示[1]345677)。
? 注意,每两个字节相加后,应紧接着进行二-十进制调整。 3、实验扩展和思考
⑴、计算两个长度为3B的二进制数据之差应如何进行操作?
⑵、计算两个长度为3B的压缩BCD码数据之差应如何进行操作?
================================================================================
实验报告
================================================================================
? 方案描述
将三字节分为两部分,高16位和低16位, 将其存入buf区内,高字节与高字节相加, 低字节与低字节相加,之后存入res中。
? 程序清单 DATAS SEGMENT buf1 dd 888888h
buf2 dd 456789h res dd 0h
string db 'liwenjun 201416010608'
,0dh,0ah,'$';此处输入数据段代码
DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT
;此处输入堆栈段代码
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
mov ax,word ptr buf1 add ax,word ptr buf2 mov word ptr res,ax mov ax,word ptr buf1+2
;此处输入代码段代码
adc ax,word ptr buf2+2
mov word ptr res+2,ax mov dx,offset string mov ah,9 int 21h MOV AH,4CH INT 21H CODES ENDS END START