汇编语言实验报告
(实验二)
一. 实验目的
1. 掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。
2. 熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。
3. 初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。
二. 程序说明
1. 计算1+2+3++10,将结果显示在屏幕上。
2. 利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到
变量BUF的10个字节中,变量BUF的形式为BUF  DB  10  DUP(?)。编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
三. 设计思想
1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余  al是商,ah是余数,后加上30h。
        2、使用si寄存器,用于在存储器中寻址。利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。利用01号功能,输出。
四. 程序代码
程序一
code segment
    main proc far
    assume cs:code
start:
    push ds
    sub ax,ax
    push ax
   
    mov bx,0ah
    mov cx, 0ah
sum1:
    add ax,bx
    dec bx
    loop sum1
printit:
    mov bl,10
    div bl
    add al,30h
    mov ch,ah
    mov dl,al
    mov ah,2
    int 21h
    add ch,30h
    mov dl,ch
    mov ah,2
    int 21h
    ret
    main endp
    code ends
end
程序二
data segment        ;数据段定义开始
    buf db 10 dup(?)      ;数据定义及其存储空间
    max db ?
    min db ?
    Str1 db 0DH,0AH,'Please input: ','$'      ;定义Str1的内容
    Str2 db 0DH,0AH,'MAX:','$'          ;定义Str2的内容
    Str3 db 0DH,0AH,'MIN:','$'            ;定义Str3的内容
data ends    ;数据段定义结束 
Stack segment stack  ;堆栈段定义开始
    db 10 dup(?)
stack ends      ;堆栈段定义结束
code segment    ;代码段定义开始
main proc far   
    assume cs:code,ds:data,ss:stack
start:                       
    push ds     
    sub ax,ax
    push ax
    mov ax,data
    mov ds,ax
    mov ax,stack
    mov ss,ax
    mov cx,10
    mov si,0      ;寄存器,用于寻址
    mov bx,0
lop1:               
    lea dx,Str1 
    mov ah,09
    int 21h
    mov ah,01h    ; 输入
    int 21h
    mov buf[si],al
    inc si
    loop lop1    ;返回循环1
    mov cx,9
    mov si,0
    mov al,buf[si]
    mov bl,al
lop2:
    inc si 
    mov dl,buf[si]
    cmp dl,al
    jl compare1
    mov al,dl
compare1:
    cmp bl,dl          ;比较,小的数放在bl
    jl compare2
    mov bl,dl
compare2:
    loop lop2 
    mov max,al 
    mov min,bl
    lea dx,Str2
    mov ah,09
    int 21h
    mov dl,max
    mov ah,02h                 
    int 21h          ;输出最大数
    lea dx,Str3
    mov ah,09
    int 21h
    mov dl,min
    mov ah,02h                 
    int 21h          ;输出最小数
    ret
    main endp
    code ends   
end start
五. 结果分析并回答
1. 设计的程序包含了几个段
2. 你的代码经过编译和连接之后,总共占用多少个字节
3. 调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?
4. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能
5. 对于第2题,若要求输入的是两位数,又该怎么办?
程序一:
运行结果
汇编语言结束指令1、本程序包含了一个段,即为代码段
2、代码经过编译和连接之后,共占32个字节
3、第一条指令的地址码
最后一条指令的地址码
程序二
运行结果
1、本程序包含了数据段、堆栈段和代码段三个段。
2、代码经过编译和连接之后,总共占用33个字节
3、第一条指令的地址码
最后一条指令的地址码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。