i know this isn't QUITE in AS3, but here's the principle i use for coding movement that can go diagonal.
i assign variables (left, right, up, down) to whether the key is down
var left:Boolean = Key.isDown(Key.LEFT);
var right:Boolean = Key.isDown(Key.RIGHT);
var up:Boolean = Key.isDown(Key.UP);
var down:Boolean = Key.isDown(Key.DOWN);
then, i assign movement simply using those variables.
vx = (right - left) * speed;
vy = (down - up) * speed;
because the isDown() method returns a boolean, it also basically returns a 0 or 1, which i use for the movement. if left is down vx will be (0 - 1) * speed, and if the down arrow key is pressed, vy will be (1 - 0) * speed.
get what i mean? i think that's pretty simple to incorporate into AS3 when you use the method ssjskipp described.