微机原理汇编实验的软件部分

微代码人生 

本文档包含了微机原理汇编实验的软件部分,仅供参考

e1.txt

;1:编程将(AX)=2387、(BX)=192FH、(CX)=9256中的无符号数按由大到

;小的顺序排序,上机编程调试出程序,并将排序结果记录在下面。

code segment

assume cs:code

start:       mov       ax,2387

       mov       bx,192fh

       mov       cx,9256

       cmp        ax,bx

       jae          next1

       mov       dx,ax

       mov       ax,bx

       mov       bx,dx

next1:     cmp        bx,cx

       ja            next2

       mov       dx,bx

       mov       bx,cx

       mov       cx,dx

next2:     cmp        ax,bx

       jae          next3

       mov       dx,ax

       mov       ax,bx

       mov       bx,dx

next3:    

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e2.txt

; 2:编程将(BX)=8600H、(CX)=3489H、(DX)=9235按有符号数由大到小

;排序,上机编程调试出程序,并将排序结果记录在下面。

code segment

assume cs:code

start:       mov       bx,8600h

       mov       cx,3489h

       mov       dx,9235

       cmp        bx,cx

       jge          next1

       mov       ax,bx

       mov       bx,cx

       mov       cx,ax

next1:     cmp        cx,dx

       jge          next2

       mov       ax,cx

       mov       cx,dx

       mov       dx,ax

next2:     cmp        bx,cx

       jge          next3

       mov       ax,bx

       mov       bx,cx

       mov       cx,ax

next3:     mov       ah,4ch

       int          21h

code ends

end start

*********************************

e3.txt

; 3:在数据段中定义如下数据:32,34,89H,,编程将以上数据按有符号数

;进行排序,并将结果记录下来。

data segment

num db 32,34,89h

data ends

code segment

assume cs:code,ds:data

start:       mov       ax,data

       mov       ds,ax

       lea          si,num

       mov       al,[si]

       cmp        al,[si+1]

       jge          next1

       mov       bl,[si+1]

       mov       [si],bl

       mov       [si+1],al

next1:     mov       al,[si+1]

       cmp        al,[si+2]

       jge          next2

       mov       bl,[si+2]

       mov       [si+1],bl

       mov       [si+2],al

next2:     mov       al,[si]

       cmp        al,[si+1]

       jge          next3

       mov       bl,[si+1]

       mov       [si],bl

       mov       [si+1],al

next3:     int          3

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e4.txt

;4:在数据段中定义如下数据:99,25,86,编程将以上数据按无符号数进行排序,

;上机调试出程序,并将结果记录下来。

data segment

nums db 99,25,86

data ends

code segment

assume cs:code,ds:data

start:       mov       ax,data

       mov       ds,ax

       lea          si,nums

       mov       al,[si]

       cmp        al,[si+1]

       jae          next1

       mov       ah,[si+1]

       mov       [si+1],al

       mov       [si],ah

next1:     mov       al,[si+1]

       cmp        al,[si+2]

       jae          next2

       mov       ah,[si+2]

       mov       [si+2],al

       mov       [si+1],ah

next2:     mov       al,[si]

       cmp        al,[si+1]

       jae          next3

       mov       ah,[si+1]

       mov       [si+1],al

       mov       [si],ah

next3:     int          3

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e5.txt

; 5:(AL)=86H,(AH)=34H,(BL)=78H,编程将以上数据按有符号数进行排序,

;上机调试出程序,并将结果记录下来。

code segment

assume cs:code

start:       mov       al,86h

       mov       ah,34h

       mov       bl,78h

       cmp        al,ah

       jge          next1

       mov       ch,al

       mov       al,ah

       mov       ah,ch

next1:     cmp        ah,bl

       jge          next2

       mov       ch,bl

       mov       bl,ah

       mov       ah,ch

next2:     cmp        al,ah

       jge          next3

       mov       ch,al

       mov       al,ah

       mov       ah,ch

next3:     int          3

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e6.txt

; 6:中断向量为:1234H:5678H,编程将此数据设置成为类型号0对应的中断向

;量,上机调试出程序,并将结果记录下来。(直接用MOV 指令写入即可)

code segment

assume   cs:code

start:       mov       ax,0

       mov       ds,ax

       mov       [si],5678h

       mov       [si+2],1234h

       int         0

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e7.txt

; 7:中断向量为:3456H:6678H,编程将此数据设置成为类型号60h对应的中断’

;向量,上机调试出程序,并将结果记录下来。(直接用MOV 指令写入即可)

code segment

assume cs:code

start:       mov       ax,0

       mov       ds,ax

       mov       ax,60h

       mov       bx,4

       mul        bx

       mov       si,ax

       mov       [si],6678h

       mov       [si+2],3456h

       int          60h

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e8.txt

; 8:中断向量为:编程将中断向量类型号为60H所对应的中断向量从中断向量表

;中取出来分别放在ES和DI中,上机调试出程序,并将程序和结果记录下来。

;(直接用MOV 指令即可)

code segment

assume cs:code

start:       mov       ax,0

       mov       ds,ax

       mov       ax,60h

       mov       bx,4

       mul        bx

       mov       si,ax

       mov       es,[si]

       mov       di,[si+2]

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e9.txt

; 9:中断向量为:编程将中断向量类型号21H所对应的中断向量从中断向量表中

;取出来分别放在SI和BP中,上机调试出程序,并将程序和结果记录下来。

;(直接用MOV 指令即可)

code segment

assume cs:code

start:       mov       ax,0

       mov       ds,ax

       mov       ax,21h

       mov       bx,4

       mul        bx

       mov       di,ax

       mov       si,[di]

       mov       bp,[di+2]

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e10.txt

; 10:中断向量为:编程将中断向量类型号45H所对应的中断向量从中断向量表

;中取出来分别放在DI和BP中,上机调试出程序,并将程序和结果记录下来。

;(直接用MOV 指令即可)

code segment

assume cs:code

start:       mov       ax,0

       mov       ds,ax

       mov       ax,45h

       mov       bx,4

       mul        bx

       mov       si,ax

       mov       di,[si]

       mov       bp,[si+2]

       int          45h

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e21.txt

;21:用A命令汇编一条INT    21H 指令,用命令T单步执行该指令, 比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况。

;此题见软件实验一的第五题

*********************************

e22.txt

;22:用命令A汇编下列程序段,用命令T 跟踪执行,判断程序段能否完成指定功能。

;程序段完成将DS:2000H开始的 5 个字节内存内容相加,

;并把相加的结果存放在DS:2005H 和 DS:2006H 内存单元中,注意:要考虑进位。

;修改后的程序如下,程序主要错误:没有考虑最高位进位

       MOV            CX,5              

       MOV            AX,0              

       MOV            BX,2000H 

next:       ADD             AL,[BX]              

       INC        BX              

       ;DEC             CX

       JNC       next1     

       inc         ah         

next1:     LOOP           next      ; (CX)-1->(CX), (CX)≠0转next

       MOV            [BX],AL

       inc         bx

       mov       [bx],ah              

*********************************

e23.txt

;23:编写完整的汇编语言程序,实现两个双字的加法,

;假设第一个操作数是10008423H,放在2000H处,

;第二个操作数是2007F00H,放在了3000H处。

;本程序将结果高位放在了CX,低位放在了DX

;10008423h+2007f00h=12010323h

data segment

n db 2000h dup(?) ;为将加数防在2000H,凑出的数

add 1dw 8423h,1000h

m db 0ffch dup(?) ;原因类似于上一个

add 2dw 7f00h,200h

data ends

code segment

assume cs:code,ds:data

start:       mov       ax,data

       mov       ds,ax

       mov       ax,ds:[2000h];直接寻址

       mov       bx,ds:[3000h]

       add        ax,bx

       mov       dx,ax

       mov       ax,ds:[2002h]

       mov       bx,ds:[3002h]

       add        ax,bx

       mov       cx,ax      

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e24.txt

;24:编写完整的汇编语言程序,

;实现:把“Hello,Liaocheng University”传送到另外一个段的内存单元处,

;注意:不准使用mov  sb/mov   sw指令。

data1 segment

lcu db ‘Hello, liaochengUniversity’,’$’  ;用$作为结束的标志

data1 ends

data2 segment

lcu2 db ?

data2 ends

code segment

assume cs:code,ds:data1

start:       mov       ax,data1

       mov       ds,ax

       lea          si,lcu

       lea          di,lcu2

lop:  mov       al,[si]

       cmp        al,’$’

       je            fin

       mov       es:[di],al

       inc          si

       inc          di

       jmp        lop

fin:  

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e25.txt

;25:用D命令查看中断向量表, 查找int     17h对应的中断向量,

并把中断向量修改为:1234H:5678H。

17*4=5ch       020a:058b

d 0000:5c

e 0000:5c

78 56 34 12

*********************************

e26.txt

;26:编写完整的汇编语言程序,把内存3000H:2000H起30个字节数据传送到内存 2000H:1000H开始处。

;用MOV S(或者直接用MOV    )

code segment

assume cs:code

start:       mov       ax,3000h

       mov       ds,ax

       mov       ax,2000h

       mov       es,ax

       mov       cx,30

       mov       si,2000h

       mov       di,1000h

       cld  

       rep        mov sb

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e27.txt

;27:编写完整的汇编语言程序,实现:显示字符串“Hello World!”,并利用debug跟踪该程序的执行过程。

;程序同31或者33

*********************************

e28.txt

;28:编写完整的汇编语言程序,

;实现子程序的功能演示

*********************************

e29.txt

;29:自编程序或者利用debug,

说明T、P、G命令的不同之处

*********************************

e30.txt

;30:说明可读写内存RAM和只读内存ROM的区别,并利用debug演示

;软件第一个实验的第四题

用D命令查看

1)DS:200~22FH和F000:200~22FH两内存块内容

2)用命令F将字符‘A’分别填入这两个内存块

温馨提示:F000:0之后的为ROM

*********************************

e31.txt

;31:编写完整的汇编语言程序,实现:显示字符串“Hello World!”,

;注意:不准使用AH=9的DOS系统功能调用,

;提示:可以使用AH=2的DOS系统功能调用(字符显示功能)。

data segment

string db ‘Hello World!’

data ends

code segment

assume cs:code,ds:data

start:       mov       ax,data

       mov       ds,ax

       mov       cx,12

       lea          si,string

lop:  mov        dl,[si]

       mov       ah,02h

       int          21h

       inc          si

       loop       lop

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e32.txt

;32:判断指令正误,并且把错误的指令改正过来。

1)ROR AX,8    ;8>1,8>>cl

2)LEA        DI,[AX] ;bx,bp,si,di     

3)MOV     DS,2010     ;段寄存器不能直接赋植立即数

4)PUSH AL       ;十六位操作数

5)OUT A00,AL  ;A00>ff,A00>>DX      

6)MOV     [BX],0  ;未指明立即数的类型

7)POP    CS   ;不能给CS赋值

8)XCHG AL,[SI]    ;

9)XCHG [DI],[SI];不能两个同为内存操作数

10)MOV  AL,[DX] ;同2

*********************************

e33.txt

;33:找出下列程序段的错误(不止一处),并改正过来。

date   segment

string db  ‘Hello, World !’,’$’;定义字符串

date    ends

code   segment

assume cs:code, ds:date

start: mov           ax,date           ;data->date

       mov       ds,ax

       mov       dx,offset string;str->string

       mov       ah,9            ;调用09字符串显示功能

       int          21h         ;21->21h

       mov       ah,4ch           ;ax->ah

       int        21h              ;21->21h

code  ends

end   start

*********************************

e34.txt

;34:将ASCII码形式表示的各位转换成为16进制的数,并且把结果合并后放在BX中。

;ASCII码:31h,41h,32h,42h

data segment

nums db 31h,41h,32h,42h

data ends

code segment

assume cs:code,ds:data

start:       mov       ax,data

       mov       ds,ax

       mov       ch,4

       lea          si,nums

lop:  mov       al,[si]

       mov       ah,0

       sub         ax,30h

       cmp        ax,9

       jbe          con

       sub         ax,7

con: add        dx,ax

       inc          si

       dec         ch

       jz            fin

       mov       cl,4

       shl          dx,cl

       jmp        lop

fin:   int         3     ;duan dian

       mov       ah,4ch

       int         21h

code ends

end start

*********************************

e35.txt

;35:将16进制的数转换成为ASCII码,并且把结果显示出来。

;16进制数:1A2Bh

code segment

assume cs:code

start:       mov       bx,1A2Bh

       mov       ch,4

lop:  mov       cl,4

       rol          bx,cl

       mov       dl,bl

       call        disp

       dec         ch

       jnz          lop

       mov       ah,4ch

       int          21h

disp proc

       and        dl,0fh

       cmp        dl,9

       jbe          next

       add        dl,7

next:       add        dl,30h

       mov       ah,2

       int          21h

       ret

disp endp

code ends

end start

*********************************

e36.txt

;36:下列程序完成两个5位十进制数的加法,分别放在data1和data2的符号地址处,

;请找出如下程序的错误之处,并改正过来。

data segment

data1 db 08h,02h,03h,03h,02h

data2 db 03h,05h,01h,04h,05h

data ends

code segment

assume cs:code

start:       mov       ax,data

       mov       ds,ax

       lea          si,data1

       mov       di,offset data2;更改mov       di,seg data2

       mov       cx,5

       clc          ;添加

p1:   mov       al,[si]

       add        al,[di]

       aaa

       mov       [si],al

       inc          di

       inc          si     ;添加

       loop       p1   ;更改LOOP    P2

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e37.txt

;37:编写完整的汇编语言程序,实现:以二进制的形式显示BX寄存器的内容

code segment

assume cs:code

start:       mov       bx,1234h

       mov       cx,16

lop:  shl          bx,1

       jc            one

       mov       dl,30h

       mov       ah,02h

       int          21h

       jmp        next

one: mov       dl,31h

       int          21h

next:       loop       lop

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e38.txt

;38:编写完整的汇编语言程序,实现:从键盘输入4个字符。

data segment

max db 5

m db 6 dup(?)

n db 23,32,56 ;用户自定义,确保输入的四个数不会覆盖掉已存在的数

data ends

code segment

assume cs:code,ds:data

start:       mov       ax,data

       mov       ds,ax

       lea          dx,max

       mov       ah,0ah

       int          21h

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

e39.txt

;39:编写完整的汇编语言程序,实现:以十六进制的形式显示BX寄存器的内容

code segment

assume cs:code

start:       mov       bx,12abh

       mov       ch,4

lop:  mov       cl,4

       rol          bx,cl

       mov       dl,bl

       call        disp

       dec         ch

       jnz          lop

       mov       ah,4ch

       int          21h

disp proc

       and        dl,0fh

       cmp        dl,9

       jbe          next

       add        dl,7

next:       add        dl,30h

       mov       ah,2

       int          21h

       ret

disp endp

code ends

end start

*********************************

e40.txt

;40:编写完整的汇编语言程序,实现:小写字母a,b,c,d到A,B,C,D的转换

data segment

res db 61h,62h,63h,64h ;小写字母的ASCII码

data ends

code segment

assume cs:code

start:       mov       ax,data

       mov       ds,ax

       lea         si,res

       mov       cx,4

lop:  sub         byte ptr [si],20h

       inc          si

       loop       lop

       mov       ah,4ch

       int          21h

code ends

end start

*********************************

类似文章