; 4 : ; 5 : _asm mov ax,0088h;
mov
ax, 136
; 6 : _asm ; 7 : {
; 8 : ; 9 : ; 10 : ; 11 : } ; 12 :
; 13 : return 0; xor eax, eax
; 14 : } pop edi pop esi pop ebx add esp, 64
cmp ebp, esp call __chkesp mov esp, ebp
pop ebp
ret 0
_main ENDP _TEXT ENDS
; 00000088H
; 00000040H
END
五. 实验体会
通过本次试验使我了解了如何使用地址表和转移表,以及怎样通过堆栈(寄存器、内存)传送所有参数调用子程序。最后实践了C?Asm的转换过程,使我对C和汇编有了更多的认识。
实验四 汇编语言高级编程专题
一. 实验目的
1、汇编语言宏程序设计;
2、 掌握中断服务子程序的编写。 3、 汇编语言与高级语言的混编。
二. 实验内容
1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min 2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。 3、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。 char dbyte[] = {0x34,0x45,0x56,0x67,0xaf};
三. 实验过程和程序
1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min min macro x,y,z mov ax,x cmp ax,y
jl next ; jc 看的是cf 是当成无符号数比较的? mov ax,y next: cmp ax,z jl final mov ax,z final: nop endm
code segment assume cs:code start: min 4 -6 3 mov ax,4c00h int 21h code ends end start
2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。 ;addres equ 1ch data segment
pian dw ? duan dw ? string db 48 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax
begin: mov ax,351ch int 21h
mov pian,bx mov duan,es push ds
mov dx,offset myproc mov ax,seg myproc mov ds,ax mov ax,251ch int 21h pop ds mov cx,0 mov bx,0
next: cmp cx,1080; 60*18 jnz next
mov dx,pian mov ax,duan mov ds,ax mov ax,251ch int 21h mov ax,4c00h int 21h
myproc proc sti
inc cx inc bx cmp bx,18